Fest assert : les assertions plus lisibles

2,404
-1

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,404
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×