Vous pourriez me demander ok mais tu as un exemple pour me dire que c'est le truc à appliquer sur mon projet ?
Prenons l'exemple d'un test qui retourne une liste de conférences. Pour valider la liste retournée je vérifie que les noms retournés correspondent bien à ceux que j'attends. Avec Junit et Mockito j'écrirai
@Test public void testTheHypestConfOK() throws Exception { // Construction de la liste des confererences attendues Conference devoxx2014 = new Conference("Devoxx2014", 154L, 658L, 2820L); Conference mixit2014 = new Conference("Mix-IT2014", 30L, 200L, 845L); conferences.add(devoxx2014); conferences.add(mixit2014); when(conferenceRepository.findAll()).thenReturn(conferences); List<Conference> theHypestConfs = defaultFavoriteService.getTheHypestConfs(); // Verification du resultat
List<String> confNames = new ArrayList<String>(); for (Conference conf : theHypestConfs) { confNames.add(conf.getName()); } List<String> expected = Arrays.asList("Mix-IT2014", "Devoxx2014"); assertEquals(expected, confNames); }
Mais avec AssertJ, je peux simplifier les assertions et avoir le code suivant
@Test public void testTheHypestConfOK2() throws Exception { // Construction de la liste des confererences attendues Conference devoxx2014 = new Conference("Devoxx2014", 154L, 658L, 2820L); Conference mixit2014 = new Conference("Mix-IT2014", 30L, 200L, 845L); conferences.add(devoxx2014); conferences.add(mixit2014); when(conferenceRepository.findAll()).thenReturn(conferences); assertThat(defaultFavoriteService.getTheHypestConfs()) .extracting("name") .containsExactlyElementsOf(Arrays.asList("Mix-IT2014", "Devoxx2014")); }
C'est tout de même plus simple non ? Je pourrai prendre tout un tas d'exemple mais je vous laisse consulter le site de Joel Costigliola créateur de AssertJ qui propose ces exemples.
La force de AssertJ (tout comme fest-assert) est de vous donner la possibilité de créer vos propres classes d'assertions. Par exemple
public class FrameworkAssert extends AbstractAssert<FrameworkAssert, Framework> { protected FrameworkAssert(Framework actual) { super(actual, FrameworkAssert.class); } /** * an entry point for FrameworkAssert */ public static FrameworkAssert assertThat(Framework actual) { return new FrameworkAssert(actual); } /** * Vérifie que les champs de la clé fonctionnelle sont renseignés */ public FrameworkAssert hasUniqueKey() { Assertions.assertThat(actual.getName()).overridingErrorMessage("Name is required").isNotNull(); Assertions.assertThat(actual.getVersion()).overridingErrorMessage("Version is required").isNotNull(); Assertions.assertThat(actual.getLanguage()).overridingErrorMessage("Language is required").isNotNull(); return this; } }
Voila pouvez maintenant tester de vous même et il faut simplement garder à l'esprit que plus le code de vos tests sera simple plus ils seront lisibles et viables dans le temps.
A mon avis tu peux meme écrire
RépondreSupprimerassertThat(defaultFavoriteService.getTheHypestConfs())
.extracting("name")
.containsExactly("Mix-IT2014", "Devoxx2014");
Il est aussi possible de générer ses propres classes d'assertions avec le générateur d'assertions, ca permet d'avoir tout un tas d'assertions rapidement et pour pas cher, cf http://joel-costigliola.github.io/assertj/assertj-assertions-generator.html
Joel