SlideShare ist ein Scribd-Unternehmen logo
1 von 20
RENDEZ VOS ASSERTIONS
LISIBLES AVEC FEST ASSERT
QUI SUIS JE ?

• Nicolas   François @nicofrancois


• Développeur    Java chez Sfeir


• Contributeur   Fest Assert 2.0
QUESTIONS FRÉQUENTES


• TDD/BDD      ?

• JUnit   ou TestNG ?

• EasyMock    ou Mockito ?
ET LES ASSERTIONS ?


• Définition   : Proposition donnée et soutenue comme vraie



• Se   doit d’exprimer une règle à vérifier : au coeur du test
VOCABULAIRE LIMITÉ

• Fournies   par JUnit et TestNG :

 • assertTrue/assertFalse(maProposition);

 • assertEquals(valeur, monObject);

 • assertNull/NotNull(monObject);

 • assertSame(monObject1, monObject2)
SYNTAXE «YODA»

• assertEquals(51, breizhCampSpeakers.size());




                          Egale à 51 doit être la taille de
                               la liste des speakers
LE PROBLÈME....

• Exprimerune proposition avec un vocabulaire pauvre et
 syntaxe non naturelle.
HAMCREST

          assertThat(breizhCampSpeakers, hasSize(51));

• Vocabulaire    plus riche

• Meilleure    syntaxe

• Repose     sur les Matcher

  • Ne     dépend pas du type

  • Il   faut connaitre le matcher à utiliser
FEST ASSERT

       assertThat(breizhCampSpeakers).hasSize(51);

• Vocabulaire   plus riche

• Meilleure   syntaxe

• Repose   sur les méthodes

  • Dépend    du type

  • Découverte    des méthodes par
ORIENTÉ SUR LE TYPE



• assertThat(XXX)   => retourne un XXXAssert

• Différents
           types supportés : ListAssert, StringAssert,
 IntegerAssert, FileAssert, ThrowableAssert, ...
FLUENT API


assertThat(breizhCampSpeakers).isNotNull()
                              .hasSize(51)
                              .doesNotContainNull()
                              .doesNotHaveDuplicates();
EXTENSIBLE
CONDITION

• Etendre        l’existant
    private final Condition<String> jedi = new Condition<String>("jedi") {
       private final Set<String> jedis = set("Luke", "Yoda", "Obiwan");
       @Override
       public boolean matches(String value) {
         return jedis.contains(value);
       }
    };




  assertThat("Yoda").is(jedi);
  assertThat("Vader").isNot(jedi);

  assertThat("Yoda").has(jediPower);
  assertThat("Solo").doesNotHave(jediPower);
ASSERTIONS
                            PERSONNALISÉES
• Propres            aux objets métiers
 public class TolkienCharacterAssert extends AbstractAssert<TolkienCharacterAssert, TolkienCharacter> {

     public TolkienCharacterAssert(TolkienCharacter actual) {
       super(actual, TolkienCharacterAssert.class);
     }

     public TolkienCharacterAssert hasName(String name) {
       // check that actual TolkienCharacter we want to make assertions on is not null.
       isNotNull();

         // we overrides the default error message with a more explicit one
         String errorMessage = format("Expected character's name to be <%s> but was <%s>", name, actual.getName());

     // raw assertion : no WritableAssertionInfo usage - simpler but not friendly with custom comparison strategy (i.e.
 usingComparator method)
     if (!actual.getName().equals(name)) { throw new AssertionError(errorMessage); }

         return this; // return the current assertion for method chaining
     }

 }
FEST ASSERT 2.0



• Ré-écriture   complète

• En   cours de développement (Actuellement M5)

• Vos   idées sont les bienvenues
NOUVEAUTÉS (1/2)

• Nouveau          type d’assertions :
    Date, Image, InputStream, Iterable, ...




• Filtrage
    assertThat(filter(players).having(mvpStats).get()).containsOnly(rose, james);




• Extraction
   assertThat(extractProperty("id", Long.class).from(fellowshipOfTheRing)).contains(1L, 2L, 3L);

   assertThat(extractProperty("race.name").from(fellowshipOfTheRing)).contains("Hobbit", "Elf")
NOUVEAUTÉ (2/2)

• Egalité     clémente
   TolkienCharacter mysteriousHobbit = new TolkienCharacter(null, 33, HOBBIT);
   assertThat(sam).isLenientEqualsToByIgnoringNullFields(mysteriousHobbit);

   assertThat(frodo).isLenientEqualsToByIgnoringFields(sam, "name", "age");

   assertThat(frodo).isLenientEqualsToByAcceptingFields(sam, "race");




• Meilleur        support des conditions
   assertThat(set("Luke", "Yoda", "Leia")).areExactly(2, jedi);

   assertThat("Vader").is(anyOf(jedi, sith));

   assertThat("Solo").is(allOf(not(jedi), not(sith)));
CONCLUSION


• Ne   faite plus d’assertions avec JUnit ou TestNG

• Expressivité                   lisibilité

• Fest Assert  fait partie du projet Fixtures for Easy Software
 Testing. Il n’est pas seul :
       A voir aussi Fest Reflect, Fest Swing
RESSOURCES

• Code      source
 https://github.com/alexruiz/fest-assert-2.x


• Guide      utilisateur
 https://github.com/alexruiz/fest-assert-2.x/wiki


• Page    Google+
 http://gplus.to/fest


• Exemple
 https://github.com/joel-costigliola/fest-examples
QUESTIONS ?

Weitere ähnliche Inhalte

Ähnlich wie Fest assert - Rendez vos assertions lisibles

Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Javajollivetc
 
Stubs And Moles Dot Net Hub
Stubs And Moles Dot Net HubStubs And Moles Dot Net Hub
Stubs And Moles Dot Net HubDotNetHub
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Javajollivetc
 
Guide javascript
Guide javascriptGuide javascript
Guide javascriptjollivetc
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5halleck45
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la viecluelessjoe
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 

Ähnlich wie Fest assert - Rendez vos assertions lisibles (9)

Javascript pour le développeur Java
Javascript pour le développeur JavaJavascript pour le développeur Java
Javascript pour le développeur Java
 
Anatomie d'une typeclass
Anatomie d'une typeclassAnatomie d'une typeclass
Anatomie d'une typeclass
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
Stubs And Moles Dot Net Hub
Stubs And Moles Dot Net HubStubs And Moles Dot Net Hub
Stubs And Moles Dot Net Hub
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Java
 
Guide javascript
Guide javascriptGuide javascript
Guide javascript
 
Exploiter php 5
Exploiter php 5Exploiter php 5
Exploiter php 5
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 

Fest assert - Rendez vos assertions lisibles

  • 2. QUI SUIS JE ? • Nicolas François @nicofrancois • Développeur Java chez Sfeir • Contributeur Fest Assert 2.0
  • 3. QUESTIONS FRÉQUENTES • TDD/BDD ? • JUnit ou TestNG ? • EasyMock ou Mockito ?
  • 4. ET LES ASSERTIONS ? • Définition : Proposition donnée et soutenue comme vraie • Se doit d’exprimer une règle à vérifier : au coeur du test
  • 5. VOCABULAIRE LIMITÉ • Fournies par JUnit et TestNG : • assertTrue/assertFalse(maProposition); • assertEquals(valeur, monObject); • assertNull/NotNull(monObject); • assertSame(monObject1, monObject2)
  • 6. SYNTAXE «YODA» • assertEquals(51, breizhCampSpeakers.size()); Egale à 51 doit être la taille de la liste des speakers
  • 7. LE PROBLÈME.... • Exprimerune proposition avec un vocabulaire pauvre et syntaxe non naturelle.
  • 8. HAMCREST assertThat(breizhCampSpeakers, hasSize(51)); • Vocabulaire plus riche • Meilleure syntaxe • Repose sur les Matcher • Ne dépend pas du type • Il faut connaitre le matcher à utiliser
  • 9. FEST ASSERT assertThat(breizhCampSpeakers).hasSize(51); • Vocabulaire plus riche • Meilleure syntaxe • Repose sur les méthodes • Dépend du type • Découverte des méthodes par
  • 10. ORIENTÉ SUR LE TYPE • assertThat(XXX) => retourne un XXXAssert • Différents types supportés : ListAssert, StringAssert, IntegerAssert, FileAssert, ThrowableAssert, ...
  • 11. FLUENT API assertThat(breizhCampSpeakers).isNotNull() .hasSize(51) .doesNotContainNull() .doesNotHaveDuplicates();
  • 13. CONDITION • Etendre l’existant private final Condition<String> jedi = new Condition<String>("jedi") { private final Set<String> jedis = set("Luke", "Yoda", "Obiwan"); @Override public boolean matches(String value) { return jedis.contains(value); } }; assertThat("Yoda").is(jedi); assertThat("Vader").isNot(jedi); assertThat("Yoda").has(jediPower); assertThat("Solo").doesNotHave(jediPower);
  • 14. ASSERTIONS PERSONNALISÉES • Propres aux objets métiers public class TolkienCharacterAssert extends AbstractAssert<TolkienCharacterAssert, TolkienCharacter> { public TolkienCharacterAssert(TolkienCharacter actual) { super(actual, TolkienCharacterAssert.class); } public TolkienCharacterAssert hasName(String name) { // check that actual TolkienCharacter we want to make assertions on is not null. isNotNull(); // we overrides the default error message with a more explicit one String errorMessage = format("Expected character's name to be <%s> but was <%s>", name, actual.getName()); // raw assertion : no WritableAssertionInfo usage - simpler but not friendly with custom comparison strategy (i.e. usingComparator method) if (!actual.getName().equals(name)) { throw new AssertionError(errorMessage); } return this; // return the current assertion for method chaining } }
  • 15. FEST ASSERT 2.0 • Ré-écriture complète • En cours de développement (Actuellement M5) • Vos idées sont les bienvenues
  • 16. NOUVEAUTÉS (1/2) • Nouveau type d’assertions : Date, Image, InputStream, Iterable, ... • Filtrage assertThat(filter(players).having(mvpStats).get()).containsOnly(rose, james); • Extraction assertThat(extractProperty("id", Long.class).from(fellowshipOfTheRing)).contains(1L, 2L, 3L); assertThat(extractProperty("race.name").from(fellowshipOfTheRing)).contains("Hobbit", "Elf")
  • 17. NOUVEAUTÉ (2/2) • Egalité clémente TolkienCharacter mysteriousHobbit = new TolkienCharacter(null, 33, HOBBIT); assertThat(sam).isLenientEqualsToByIgnoringNullFields(mysteriousHobbit); assertThat(frodo).isLenientEqualsToByIgnoringFields(sam, "name", "age"); assertThat(frodo).isLenientEqualsToByAcceptingFields(sam, "race"); • Meilleur support des conditions assertThat(set("Luke", "Yoda", "Leia")).areExactly(2, jedi); assertThat("Vader").is(anyOf(jedi, sith)); assertThat("Solo").is(allOf(not(jedi), not(sith)));
  • 18. CONCLUSION • Ne faite plus d’assertions avec JUnit ou TestNG • Expressivité lisibilité • Fest Assert fait partie du projet Fixtures for Easy Software Testing. Il n’est pas seul : A voir aussi Fest Reflect, Fest Swing
  • 19. RESSOURCES • Code source https://github.com/alexruiz/fest-assert-2.x • Guide utilisateur https://github.com/alexruiz/fest-assert-2.x/wiki • Page Google+ http://gplus.to/fest • Exemple https://github.com/joel-costigliola/fest-examples

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n