web-dev-qa-db-fra.com

Comment faire JUnit pour imprimer des assertions et des résultats

J'ai quelques tests comme celui-ci:

@Test
public void test01()
{
    Position p = getPositionAt('a', 1);
    assertNotNull("a1 exists", p);
    assertNotNull("figure exists a1", p.getFigure());

    p = getPositionAt('a', 2);
    assertNotNull("exists a2", p);
    assertNull("figure exists a2", p.getFigure());

    p = getPositionAt('b', 1);
    assertNotNull("exists b1", p);
    assertNull("figure exists b1", p.getFigure());
}

Ce dont j'ai besoin lors de l'exécution des tests, c'est d'imprimer chaque message d'assertion sur stdout, puis le résultat de l'assertion.

C'est le format requis de la classe de test:

a1 exists -success
figure exists a1 -success
exists a2 -success
figure exists a2 -succcess
exists b1 -succcess
figure exists b1 -failed

Mais comment faire ça? Je suis tout à fait nouveau avec JUnit et je n'en ai aucune idée. Est-il possible d'utiliser runners et suites? Ou existe-t-il des méthodes assertSuccess(), assertFailed()? Merci pour tout indice.

28
Petr Přikryl

Premièrement, vous avez deux problèmes et non un seul. Lorsqu'une assertion échoue, une exception AssertionError est levée. Cela empêche toute assertion au-delà de ce point d'être vérifiée. Pour résoudre ce problème, vous devez utiliser un ErrorCollector .

Deuxièmement, je ne pense pas qu'il existe un moyen intégré à JUnit pour ce faire. Cependant, vous pouvez implémenter vos propres méthodes qui encapsulent les assertions:

public static void assertNotNull(String description, Object object){
     try{
          Assert.assertNotNull(description, object);
          System.out.println(description + " - passed");
     }catch(AssertionError e){
          System.out.println(description + " - failed");

        throw e;
     }
}
19
John B

Toutes les méthodes assertXXX ont un formulaire qui permet d'afficher une chaîne en cas d'erreur:

assertNotNull("exists a2", p); // prints "exists a2" if p is null

Il n'y a aucune valeur particulière à imprimer un message de réussite.

[~ # ~] modifier [~ # ~]

Junit fournit généralement 2 formes d'assertion. Pour suivre l'exemple ci-dessus, vous pouvez tester une valeur nulle de 1 à 2 façons:

assertNotNull(p)

ou

assertNotNull("my message on failure", p)

Le cadre imprimera les messages d'erreur sans aucun autre effort requis par vous (il est fourni par le cadre).

Pour tester les exceptions, vous utiliseriez le modèle suivant:

try{
    someCall();
catch(Exception e){
    fail(): // exception shouldn't happen, use assertTrue(true) if it should
}

Encore une fois, il existe des versions de ces méthodes pour ajouter un message

Vérifiez le API

10
Romski

Une option de dernier recours consiste à associer chaque assertion à un System.out.println, bien que ce ne soit évidemment pas idéal. Pourtant, cela résoudra le problème si tout le reste échoue.

2
durron597