Junit4: Kategorien + Parametriert funktioniert immer noch nicht in 4.9 final (#74 wieder öffnen?)

Erstellt am 24. Aug. 2011  ·  8Kommentare  ·  Quelle: junit-team/junit4

Ich fürchte, das Kategorien- und parametrisierte Duo funktioniert mit dem neuen junit 4.9 final immer noch nicht richtig, aber nach #74-Änderungen ist das Feedback viel besser als das nachrichtenlose NPE. Beachten Sie, dass die Testklasse eine
Der Stacktrace:

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)

Code-Schnipsel - Importe aus Gründen der Kürze weggelassen, ich kann Ihnen bei Bedarf ein komplettes Eclipse-/Ameisen-Projekt zur Verfügung stellen.
Der problematische Test:

@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);
    }

}

Die Suite:

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

}

Wenn ich die @Category in AdditionTest einwandfrei aus (sie enthält "normale" Testmethoden, hat auch @Category auf Klassenebene).

bug parameterized regression

Alle 8 Kommentare

Pawel,

Danke für den Fehlerbericht. Ich denke, der angehängte Commit wird es beheben. Haben Sie in den nächsten 24 Stunden Zeit, einen Blick darauf zu werfen? Vielen Dank.

Ja, werde es versuchen. Werde in ein paar Stunden wieder da sein. Vielen Dank.

Es funktioniert jetzt perfekt - vielen Dank.
Ich habe einen Branch aus deinem categorized_parameters_fix erstellt, junit4.10-SNAPSHOT gebaut und jetzt leben Parameterized und Category glücklich zusammen. Darüber hinaus habe ich bestätigt, dass das Gleiche für Theorien gilt (und dies auch zuvor war), die einer Suite hinzugefügt wurden, wie zum Beispiel:

@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);
    }
}

Gibt es eine Chance, dass der Fix es in 4.9.1 schafft?

Tatsächlich überspringe ich 4.9.1 und werde 4.10 in der nächsten Woche oder so veröffentlichen, mit diesem Fix.

Bei mir funktioniert es immer noch nicht, ich benutze junit 4.12

@1hanymhajna kannst du uns einen minimalen Testfall geben?

sicher:
@RunWith(Parameterized.class)
öffentliche Klasse myClass {

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

@Category(myCategory.class)
@Prüfung
public void myTest(){
Assert.assertTrue(wahr);
}

}

Wenn ich diesen Test ohne Kategorie ausführe, funktioniert er für mich gut, aber wenn ich Kategorie mit parametrisierter Klasse füge, wird eine Ausnahme mit dieser Fehlermeldung ausgelöst: Kategorieanmerkungen zu parametrisierten Klassen werden bei einzelnen Methoden nicht unterstützt

@1hanymhajna danke für die schnelle Antwort.

Wir können möglicherweise versuchen, dies zu beheben, aber in JUnit5 werden wir parametrisierte Tests ohne speziellen Runner unterstützen. Ich schlage vor, einen Fehler einzureichen, um sicherzustellen, dass JUnit5 Kategorien + Parameter unterstützt.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen