Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Fest assert : les assertions plus lisibles

2,688 views

Published on

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

Published in: Technology
  • Be the first to comment

Fest assert : les assertions plus lisibles

  1. 1. FestAssert : les assertions plus lisible
  2. 2. Assertion ? <ul><ul><li>assertion : (nom féminin) Proposition qu'on affirme </li></ul></ul><ul><ul><li>Dans un contexte de test, c'est pareil. Si l'affirmation n'est pas vérifiée => ECHEC </li></ul></ul>
  3. 3. Avec quoi les écrire ? <ul><ul><li>JUnit  </li></ul></ul><ul><ul><li>Je fais mes assertions avec parce qu'on s'en sert pour les test. </li></ul></ul><ul><ul><li>TestNG Je fais mes assertions avec parce qu'on s'en sert pour les test. </li></ul></ul><ul><ul><li>FestAssert Ce qu'on va voir </li></ul></ul><ul><ul><li>Hamcrest Ce qui a inspiré FestAssert </li></ul></ul>
  4. 4. JUnit - Ecrire assertion <ul><li>Peu de vocubulaire : </li></ul><ul><ul><li>assertTrue(maProposition) assertFalse(maProposition) </li></ul></ul><ul><ul><li>assertEquals(objAttendu, objAVerifier) </li></ul></ul><ul><ul><li>assertSame(objAttendu, objAVerifier) </li></ul></ul><ul><ul><li>assertNull(monObjet) assertNotNull(monObjet) </li></ul></ul>
  5. 5. JUnit - Ecrire assertion Ah bon, je croyais que je devais formuler une proposition ?
  6. 6. 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 ?
  7. 7. JUnit - Yoda assertions assertEquals(20, partipants.size());   Je souhaite que égal à 20 soit le nombre de participants
  8. 8. 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.
  9. 9. FestAssert Heureusement non : assertThat(participants).hasSize(20);
  10. 10. FestAssert - Junit Je dois changer mon framework de test alors ? Non, pas du tout, FestAssert fait s'occupe seulement des assertions.
  11. 11. FestAssert Lexique plus riche, plus simple assertThat(partipants).doesNotHaveDuplicate();   Et en plus, je peux chainer tout ça : assertThat(partipants).isNotNull().hasSize(20) .doesNotHaveDuplicate();  
  12. 12. FestAssert - Syntaxe <ul><li>Assertions  <= je m'en passe avec les imports statiques </li></ul><ul><li>.assertThat(monObjet)  <= Fournit un xxxAssert </li></ul><ul><li>.methode(...)  <= Méthode spécifique </li></ul><ul><li>Et j'ai un bon nombre de xxxAssert : </li></ul><ul><ul><li>ListAssert </li></ul></ul><ul><ul><li>FileAssert </li></ul></ul><ul><ul><li>FloatAssert </li></ul></ul><ul><ul><li>MapAssert </li></ul></ul><ul><ul><li>StringAssert </li></ul></ul><ul><ul><li>ObjectAssert </li></ul></ul><ul><ul><li>.... </li></ul></ul><ul><li>Si pas mon objet n'a pas de xxxAssert, c'est le ObjectAssert </li></ul>
  13. 13. Vérifier présence de certains ? List<Employe> partipants = bof.getParticipants(); Employe nicolas = sfeir.getXXX Employe fabien = sfeir.getXXX assertThat(partipants).contains(nicolas, fabien); Pas super... Vérification liste
  14. 14. Fournit un ListAssert d'une liste transformée : List<A> => List<B> assertThat(partipants).onProperty(&quot;prenom&quot;) .contains(&quot;Nicolas&quot;, &quot;Fabien&quot;); onProperty
  15. 15. 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); }  
  16. 16. Failure 2/2 Des fois l'assertion est fausse : @Test public void junitString() {     assertNotNull(nom); }   @Test public void festAssertString() {     assertThat(nom).isNotNull(); }  
  17. 17. FestAssert - Extension Y'a même pas la méthode que je veux dans le xxxAssert
  18. 18. 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());  
  19. 19. FestAssert - Extension Y'a même pas le xxxAssert pour mon objet métier
  20. 20. 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), &quot; should be between :&quot;, inBrackets(begin), &quot; and &quot;, inBrackets(end)));      }   } Et je m'en sers : MyAssertions.assertThat(maDate).isBeetwen(debutPeriode,finPeriode);

×