Fest assert : les assertions plus lisibles

  • 2,190 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,190
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
12
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. FestAssert : les assertions plus lisible
  • 2. 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
  • 3. 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
  • 4. JUnit - Ecrire assertion
    • Peu de vocubulaire :
      • assertTrue(maProposition) assertFalse(maProposition)
      • assertEquals(objAttendu, objAVerifier)
      • assertSame(objAttendu, objAVerifier)
      • assertNull(monObjet) assertNotNull(monObjet)
  • 5. JUnit - Ecrire assertion Ah bon, je croyais que je devais formuler une proposition ?
  • 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. JUnit - Yoda assertions assertEquals(20, partipants.size());   Je souhaite que égal à 20 soit le nombre de participants
  • 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. FestAssert Heureusement non : assertThat(participants).hasSize(20);
  • 10. FestAssert - Junit Je dois changer mon framework de test alors ? Non, pas du tout, FestAssert fait s'occupe seulement des assertions.
  • 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. FestAssert - Syntaxe
    • Assertions  <= 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
  • 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. 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. 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. Failure 2/2 Des fois l'assertion est fausse : @Test public void junitString() {     assertNotNull(nom); }   @Test public void festAssertString() {     assertThat(nom).isNotNull(); }  
  • 17. FestAssert - Extension Y'a même pas la méthode que je veux dans le xxxAssert
  • 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. FestAssert - Extension Y'a même pas le xxxAssert pour mon objet métier
  • 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);