20
FestAssert : les assertions plus lisible

Fest assert : les assertions plus lisibles

Embed Size (px)

DESCRIPTION

Présentation Fest Assert que j'ai faites au bof Sfeir du 10 juin 2011

Citation preview

Page 1: Fest assert : les assertions plus lisibles

FestAssert : les assertions plus lisible

Page 2: Fest assert : les assertions plus lisibles

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

Page 3: Fest assert : les assertions plus lisibles

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

Page 4: Fest assert : les assertions plus lisibles

JUnit - Ecrire assertion

Peu de vocubulaire :• assertTrue(maProposition)

assertFalse(maProposition)• assertEquals(objAttendu, objAVerifier)• assertSame(objAttendu, objAVerifier)• assertNull(monObjet)

assertNotNull(monObjet)

Page 5: Fest assert : les assertions plus lisibles

JUnit - Ecrire assertion

Ah bon, je croyais que je devais formuler une proposition ?

Page 6: Fest assert : les assertions plus lisibles

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 ?

Page 7: Fest assert : les assertions plus lisibles

JUnit - Yoda assertions

assertEquals(20, partipants.size()); Je souhaite que égal à 20 soit le nombre de participants

Page 8: Fest assert : les assertions plus lisibles

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.

Page 9: Fest assert : les assertions plus lisibles

FestAssert

Heureusement non :assertThat(participants).hasSize(20);

Page 10: Fest assert : les assertions plus lisibles

FestAssert - Junit

Je dois changer mon framework de test alors ?

Non, pas du tout, FestAssert fait s'occupe seulement des assertions.

Page 11: Fest assert : les assertions plus lisibles

FestAssertLexique plus riche, plus simpleassertThat(partipants).doesNotHaveDuplicate(); Et en plus, je peux chainer tout ça :assertThat(partipants).isNotNull().hasSize(20).doesNotHaveDuplicate();

Page 12: Fest assert : les assertions plus lisibles

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

Page 13: Fest assert : les assertions plus lisibles

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

Page 14: Fest assert : les assertions plus lisibles

Fournit un ListAssert d'une liste transformée : List<A> => List<B>

assertThat(partipants).onProperty("prenom").contains("Nicolas", "Fabien");

onProperty

Page 15: Fest assert : les assertions plus lisibles

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); }

Page 16: Fest assert : les assertions plus lisibles

Failure 2/2

Des fois l'assertion est fausse :@Test public void junitString() { assertNotNull(nom); }

@Test public void festAssertString() { assertThat(nom).isNotNull(); }

Page 17: Fest assert : les assertions plus lisibles

FestAssert - Extension

Y'a même pas la méthode que je veux dans le xxxAssert

Page 18: Fest assert : les assertions plus lisibles

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());

Page 19: Fest assert : les assertions plus lisibles

FestAssert - Extension

Y'a même pas le xxxAssert pour mon objet métier

Page 20: Fest assert : les assertions plus lisibles

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);