Fest Assertions, enfin des tests lisibles

Rien de révolutionnaire ici mais je viens de découvrir (avec beaucoup de retard) la libraire d’assertion Fest qui nous apporte beaucoup en confort de travail lors de nos test unitaires.

JUnit

Junit nous offre déjà des méthodes d’assertions.

import static org.junit.Assert.*;

public class JunitTest {
  @Test
  public void test() {
    MyObject myObj = ...
    MyObject expectedObj = ...
    assertEquals(expectedObj, myObj);
    assertNotNull(myObj.getName());
    assertEquals(10, myObj.getChildren().size());
    assertTrue(myObj.isActive());
  }
}

Hamcrest

Hamcrest nous apporte une syntaxe plus riche… mais il faut connaître les matchers disponibles.

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.*;

public class HamcrestTest {
  @Test
  public void test() {
    MyObject myObj = ...
    MyObject expectedObj = ...
    assertThat(myObj, is(expectedObj));
    assertThat(myObj.getName(), nullValue());
    assertThat((Collection) myObj.getChildren(), is(not(empty())));
    assertThat(myObj.getChildren(), hasSize(10));
    assertThat(myObj.isActive(), is(true));
  }
}

Pas super lisible tout ça…

Fest Assert

Fest apporte une syntaxe “fluent” plus riche, plus lisible et surtout on peut profiter pleinement du “auto-complete” de notre IDE préféré :-)

import static org.fest.assertions.api.Assertions.assertThat;

public class FestTest {
  @Test
  public void test() {
    MyObject myObj = ...
    MyObject expectedObj = ...
    assertThat(myObj).isEqualTo(expectedObj);
    assertThat(myObj.getName()).isNotNull();
    assertThat(myObj.getChildren())
      .isNotNull()
      .isNotEmpty()
      .hasSize(10);
    assertThat(myObj.isActive()).isTrue();
  }
}

On y voit quand même plus clair maintenant ;-)

De plus, Fest est facilement extensible. Il y a d’ailleurs quelques extension intéressantes pour Joda Time et Guava.



blog comments powered by Disqus