Upload
francois-nicolas
View
2.288
Download
0
Embed Size (px)
DESCRIPTION
Présentation Fest Assert que j'ai faites au bof Sfeir du 10 juin 2011
Citation preview
FestAssert : les assertions plus lisible
Assertion ?
• assertion : (nom féminin) Proposition qu'on affirme
• Dans un contexte de test, c'est pareil.Si l'affirmation n'est pas vérifiée => ECHEC
Avec quoi les écrire ?
• JUnit • Je fais mes assertions avec parce qu'on s'en sert pour les test.• TestNG
Je fais mes assertions avec parce qu'on s'en sert pour les test.• FestAssert
Ce qu'on va voir• Hamcrest
Ce qui a inspiré FestAssert
JUnit - Ecrire assertion
Peu de vocubulaire :• assertTrue(maProposition)
assertFalse(maProposition)• assertEquals(objAttendu, objAVerifier)• assertSame(objAttendu, objAVerifier)• assertNull(monObjet)
assertNotNull(monObjet)
JUnit - Ecrire assertion
Ah bon, je croyais que je devais formuler une proposition ?
JUnit - Ecrire assertion
Ben si, regarde :
List<Employe> partipants = bof.getParticipants(); assertNotNull(participants); assertEquals(20, partipants.size());
La syntaxe de la 2ème assertions est bizarre...Ca me fait penser à quelqu'un.... mais qui ?
JUnit - Yoda assertions
assertEquals(20, partipants.size()); Je souhaite que égal à 20 soit le nombre de participants
JUnit
Oulah, je vais devoir parler comme Yoda. Et si jamais, j'ai besoin d'un assertTrue, ça va être compliqué....
Je veux seulement vérifier que le nombre de partipants est de 20.
FestAssert
Heureusement non :assertThat(participants).hasSize(20);
FestAssert - Junit
Je dois changer mon framework de test alors ?
Non, pas du tout, FestAssert fait s'occupe seulement des assertions.
FestAssertLexique plus riche, plus simpleassertThat(partipants).doesNotHaveDuplicate(); Et en plus, je peux chainer tout ça :assertThat(partipants).isNotNull().hasSize(20).doesNotHaveDuplicate();
FestAssert - SyntaxeAssertions <= je m'en passe avec les imports statiques
.assertThat(monObjet) <= Fournit un xxxAssert
.methode(...) <= Méthode spécifique
Et j'ai un bon nombre de xxxAssert :• ListAssert• FileAssert• FloatAssert• MapAssert• StringAssert• ObjectAssert• ....
Si pas mon objet n'a pas de xxxAssert, c'est le ObjectAssert
Vérifier présence de certains ?
List<Employe> partipants = bof.getParticipants();Employe nicolas = sfeir.getXXXEmploye fabien = sfeir.getXXX
assertThat(partipants).contains(nicolas, fabien);
Pas super...
Vérification liste
Fournit un ListAssert d'une liste transformée : List<A> => List<B>
assertThat(partipants).onProperty("prenom").contains("Nicolas", "Fabien");
onProperty
Failure 1/2
Parfois l'assertion est fausse :@Test public void junitListe() { assertEquals(20, liste.size()); }
@Test public void festassertListe() { Assertions.assertThat(liste).hasSize(20); }
Failure 2/2
Des fois l'assertion est fausse :@Test public void junitString() { assertNotNull(nom); }
@Test public void festAssertString() { assertThat(nom).isNotNull(); }
FestAssert - Extension
Y'a même pas la méthode que je veux dans le xxxAssert
FestAssert - Syntaxe
J'écris ma condition !private class IsListeTailleImpaireCondition extends Condition<List<?>> { @Override public boolean matches(List value) { if(value == null){ return false; } else { return value.size()%2==1; } } }
Et je m'en sers : assertThat(maListe).satifies(new IsListeTailleImpaireCondition());
assertThat(maListe).doesNotsatify(new IsListeTailleImpaireCondition());
FestAssert - Extension
Y'a même pas le xxxAssert pour mon objet métier
FestAssert - Mon xxxAssert à moi
J'écris mon xxxAssert :public class DateTimeAssert extends GenericAssert<DateTimeAssert, DateTime> { public DateTimeAssert(DateTime actual) { super(DateTimeAssert.class, actual); }
public DateTimeAssert isBetween(DateTime begin, DateTime end){ isNotNull(); if(actual.compareTo(begin) >= 0 && actual.compareTo(end) <= 0) { return this; } throw failure(inBrackets(actual), " should be between :", inBrackets(begin), " and ", inBrackets(end))); } }
Et je m'en sers :MyAssertions.assertThat(maDate).isBeetwen(debutPeriode,finPeriode);