Junit4: Catégories + Paramétré ne fonctionne toujours pas en 4.9 final (#74 rouvrir ?)

Créé le 24 août 2011  ·  8Commentaires  ·  Source: junit-team/junit4

Je crains que le duo catégories + paramétré ne fonctionne toujours pas correctement avec la nouvelle version finale de junit 4.9, mais après les changements de #74, le retour est bien meilleur que le NPE sans message. Notez que la classe de test a une annotation
La trace de pile :

java.lang.Exception: Category annotations on Parameterized classes are not supported on individual methods.
    at org.junit.runners.model.InitializationError.<init>(InitializationError.java:30)
    at org.junit.experimental.categories.Categories.assertNoDescendantsHaveCategoryAnnotations(Categories.java:179)
    at org.junit.experimental.categories.Categories.assertNoCategorizedDescendentsOfUncategorizeableParents(Categories.java:171)
    at org.junit.experimental.categories.Categories.assertNoCategorizedDescendentsOfUncategorizeableParents(Categories.java:173)
    at org.junit.experimental.categories.Categories.<init>(Categories.java:156)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:35)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Extraits de code - importations omises par souci de concision, je peux vous fournir un projet complet d'éclipse/fourmi si nécessaire.
Le test problématique :

@RunWith(Parameterized.class)
@Category(SampleCategory.class)
public class AdditionTest {

    static final Integer[][] SCENARIOS = new Integer[][] { { 2, 2, 4 },
            { -2, 2, 0 }, { -4, -1, -5 }, };
    int one, two, expectedSum;

    public AdditionTest(int one, int two, int expectedSum) {
        super();
        this.one = one;
        this.two = two;
        this.expectedSum = expectedSum;
    }

    <strong i="12">@Test</strong>
    public void addAndSeeWhatHappens() throws Exception {
        assertEquals("sum", expectedSum, one + two);
    }

    <strong i="13">@Parameters</strong>
    public static Collection<Integer[]> regExValues() {
        return Arrays.asList(SCENARIOS);
    }

}

La suite :

@RunWith(Categories.class)
@IncludeCategory(SampleCategory.class)
@SuiteClasses({ AdditionTest.class, MultiplicationTest.class })
public class SampleSuite {

}

Lorsque je commente @Category dans AdditionTest, la suite exécute

bug parameterized regression

Tous les 8 commentaires

Pawel,

Merci pour le rapport de bogue. Je pense que le commit ci-joint le corrigera. Avez-vous le temps d'y jeter un coup d'œil dans les prochaines 24 heures ? Merci.

Oui, va essayer. Sera de retour dans quelques heures. Merci.

Cela fonctionne parfaitement maintenant - merci beaucoup.
J'ai créé une branche à partir de votre catégorisé_paramètres_fix, construit junit4.10-SNAPSHOT et maintenant paramétré et catégorie vivent ensemble avec bonheur. De plus, j'ai vérifié que la même chose est vraie (et c'était en fait avant) pour les théories ajoutées à une suite, telles que :

@RunWith(Theories.class)
@Category(SampleCategory.class)
public class NumberTheoryOrSomething {

    <strong i="7">@DataPoints</strong>
    public static int[] someNumbers = { 1, 4, -5, 10, -100, -3, 0, 45, -997 };

    <strong i="8">@Theory</strong>
    public void positiveTheory(int one, int two) {
        assumeTrue(one >= 0 && two >= 0);
        assertTrue("The result should not be negative", one * two >= 0);
    }

    <strong i="9">@Theory</strong>
    public void surprisinglyPositiveTheory(int one, int two) {
        assumeTrue(one < 0 && two < 0);
        assertTrue("The result should be positive", one * two >= 0);
    }
}

Y a-t-il une chance que le correctif atteigne la version 4.9.1 ?

En fait, je saute la version 4.9.1 et je publierai la 4.10 dans la semaine prochaine, avec ce correctif inclus.

ça ne fonctionne toujours pas pour moi, j'utilise junit 4.12

@1hanymhajna pouvez-vous nous donner un cas de test minimal ?

Bien sur:
@RunWith(Parameterized.class)
classe publique maClasse {

 @Parameterized.Parameters(name = "{index}: params for test:({0})")
public static ArrayList<String[]> loadProcessorList() throws IOException {
    return MyParams.loadParams();
}

@Catégorie(maCatégorie.classe)
@Test
public void myTest(){
Assert.assertTrue(true);
}

}

si j'exécute ce test sans catégorie, cela fonctionne bien pour moi, mais si je mets une catégorie avec une classe paramétrée, une exception est levée avec ce message d'erreur : Les annotations de catégorie sur les classes paramétrées ne sont pas prises en charge sur les méthodes individuelles

@1hanymhajna merci pour la réponse rapide.

Nous pouvons éventuellement envisager de résoudre ce problème, mais dans JUnit5, nous prendrons en charge les tests paramétrés sans coureur spécial. Je suggère de signaler un bogue pour s'assurer que JUnit5 prend en charge les catégories + les paramètres.

Cette page vous a été utile?
0 / 5 - 0 notes