231 votes

Changement des noms des tests paramétrés

Y a-t-il un moyen de mettre mes propres noms de cas de test personnalisée lorsque vous utilisez des tests paramétrés dans JUnit4 ?

Je voudrais changer la valeur par défaut — `` — à quelque chose de significatif.

342voto

rescdsk Points 4136

Cette fonctionnalité a fait JUnit 4.11.

Pour changer le nom de paramétrées tests, vous dites:

@Parameters(name="namestring")

namestring est une chaîne de caractères, qui peut avoir la spéciale suivante espaces réservés:

  • {index} - l'indice de cet ensemble d'arguments. La valeur par défaut namestring est {index}.
  • {0} - le premier paramètre de la valeur de cette invocation de l'épreuve.
  • {1} - la deuxième valeur de paramètre
  • et ainsi de suite

Par exemple (à partir de l'unité de test pour l' Parameterized d'annotation)

@RunWith(Parameterized.class)
static public class FibonacciTest {
    @Parameters(name= "{index}: fib({0})={1}")
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 },
                { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
    }

    private final int fInput;
    private final int fExpected;

    public FibonacciTest(int input, int expected) {
        fInput= input;
        fExpected= expected;
    }

    @Test
    public void testFib() {
        assertEquals(fExpected, fib(fInput));
    }

    private int fib(int x) {
        // TODO: actually calculate Fibonacci numbers
        return 0;
    }
}

donnera des noms comme testFib[1: fib(1)=1] et testFib[4: fib(4)=3]. ( testFib la partie du nom qui est le nom de la méthode de l' @Test).

39voto

Yishai Points 42417

En regardant JUnit 4.5, son coureur clairement ne supporte pas que, tant que cette logique est enterré à l'intérieur d'un cours privé à l'intérieur de la classe Paramétrée. Vous ne pourriez pas utiliser JUnit Paramétrée coureur, et de créer votre propre place qui permettrait de comprendre le concept de noms (qui mène à la question de la façon dont vous pouvez définir un nom ...).

À partir d'un point de vue JUnit, ce serait bien si, au lieu de (ou en plus) de passage d'un échelon, ils allaient passer la virgule délimitée par des arguments. TestNG. Si la fonctionnalité est importante pour vous, vous pouvez commenter sur la liste de diffusion yahoo référencés à www.junit.org.

19voto

darrenp Points 872

Je suis récemment tombé sur le même problème lors de l'utilisation de JUnit 4.3.1. J'ai mis en place une nouvelle classe qui s'étend Paramétrée appelé LabelledParameterized. Il a été testé en utilisant JUnit 4.3.1, 4.4 et 4.5. Il reconstruit la Description de l'instance à l'aide de la représentation de Chaîne du premier argument de chaque paramètre de tableau à partir de la @Paramètres de la méthode. Vous pouvez voir le code:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../LabelledParameterized.java?r=3789

et un exemple de son utilisation:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../ServerBuilderTest.java?r=3789

Le test de formats de description bien dans Eclipse, qui est ce que je voulais car cela rend l'échec des tests beaucoup plus facile à trouver! Je vais probablement l'affiner et de le documenter les classes au cours de la prochaine quelques jours/semaines. Déposer le '?' la partie de l'Url si vous voulez le bord de saignement. :-)

Pour l'utiliser, tout ce que vous avez à faire est de copier cette classe (GPL v3), et le changement annotation @RunWith(Parameterized.class) à l'annotation @RunWith(LabelledParameterized.class en supposant que le premier élément de votre liste de paramètres est un bon label.

Je ne sais pas si les versions ultérieures de JUnit répondre à cette question, mais même si ils l'ont fait, je ne peux pas mettre à jour JUnit depuis tous mes co-développeurs de mettre à jour aussi, et nous avons d'autres priorités que de la re-outillage. D'où le travail dans la classe pour être compilable par de multiples versions de JUnit.


Remarque: il y a une certaine réflexion jiggery-pokery afin qu'elle s'exécute à travers les différents JUnit versions mentionnées ci-dessus. La version spécifiquement pour JUnit 4.3.1 peut être trouvé ici, et, pour JUnit 4.4 et 4.5, ici.

13voto

David Moles Points 7669

Avec comme un modèle, j’ai écrit mon propre test personnalisé runner / suite--a seulement pris environ une demi-heure. C’est un peu différent de michelp en ce qu’il vous permet de spécifier un nom explicitement plutôt que de compter sur le premier paramètre `` .

Aussi, il n’utilise pas les tableaux parce que je déteste les tableaux. :)

Et un exemple :

6voto

yliang Points 61

de junit4.8.2, vous pouvez créer votre propre classe de MyParameterized par simple copie classe paramétrée. changer les méthodes getName() et testName() dans TestClassRunnerForParameters.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X