Mondi su mondi, sistemi di sistemi.

JUnit 4.4: nuove possibilità

Anche se sono mesi che non apro Eclipse, le novità dell’ultima ver­sione di JUnit sono ben­ve­nute. Ad es. adesso, al pari di altri fra­meworks – JMock, se non ricordo male – è pos­si­bile scri­vere cose del tipo:

assertThat(x, is(3));
assertThat(x, is(not(4)));
assertThat(responseString, either(containsString("color"))
    .or(containsString("colour")));
assertThat(myList, hasItem("3"));

Altra aggiunta utile e, soprat­tutto, che può cam­biare l’approccio ad alcuni sce­nari di test è la pos­si­bi­lità di espli­ci­tare gli assunti rite­nuti validi durante lo sviluppo:

assertThat(x, is(3));
@Test public void filenameIncludesUsername() {
       assumeThat(File.separatorChar, is('/'));
       assertThat(new User("optimus").configFileName(),
           is("configfiles/optimus.cfg"));
}

Ad oggi que­sti assunti non fanno fal­lire il test se si rive­lano falsi.

Per esten­sione sono state intro­dotte le teo­rie. Ad es:

assertThat(x, is(3));
@RunWith(Theories.class)
public class UserTest {
  @DataPoint public static String GOOD_USERNAME = "optimus";
  @DataPoint public static String USERNAME_WITH_SLASH = "optimus/prime";

  @Theory public void filenameIncludesUsername(String username) {
    assumeThat(username, not(containsString("/")));
    assertThat(new User(username).configFileName(),
        containsString(username));
  }
}

La teo­ria espressa da filenameIncludesUsername viene veri­fi­cata per ogni @DataPoint e il test fal­li­sce se, per un @DataPoint che con­ferma l’assunto, l’asserzione è falsa.

Grazie ai data point è ora pos­si­bile scri­vere test su insiemi in maniera più natu­rale; TestNG rimane ancora avanti in que­sto set­tore ma la distanza si è accorciata.

Per proseguire

Commenti e trackback sono disabilitati.