Junit4: Kategori + Parameter masih tidak berfungsi di 4.9 final (#74 buka kembali?)

Dibuat pada 24 Agu 2011  ·  8Komentar  ·  Sumber: junit-team/junit4

Saya khawatir kategori + duo berparameter masih tidak berfungsi dengan baik dengan final junit 4.9 yang baru, namun setelah perubahan #74, umpan baliknya jauh lebih baik daripada NPE tanpa pesan. Perhatikan bahwa kelas uji memiliki anotasi @Category di tingkat kelas.
Jejak tumpukan:

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)

Cuplikan kode - impor dihilangkan untuk singkatnya, saya dapat memberi Anda proyek Eclipse/ant lengkap jika perlu.
Tes bermasalah:

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

}

Suite:

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

}

Ketika saya mengomentari @Category di AdditionTest, suite menjalankan MultiplicationTest dengan baik (berisi metode pengujian "normal", juga memiliki @Category tingkat kelas).

bug parameterized regression

Semua 8 komentar

Pawel,

Terima kasih atas laporan bugnya. Saya pikir komit terlampir akan memperbaikinya. Apakah Anda punya waktu untuk melihatnya sekilas dalam 24 jam ke depan? Terima kasih.

Ya, akan mencoba. Akan kembali dalam beberapa jam. Terima kasih.

Ini bekerja dengan sempurna sekarang - terima kasih banyak.
Saya membuat cabang dari category_parameters_fix Anda, membangun junit4.10-SNAPSHOT dan sekarang Parameterized dan Category hidup bersama dengan bahagia. Terlebih lagi, saya memverifikasi bahwa hal yang sama benar (dan sebenarnya sebelumnya) untuk Teori yang ditambahkan ke suite, seperti:

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

Apakah ada kemungkinan perbaikan akan mencapai 4.9.1?

Sebenarnya, saya melewatkan 4.9.1, dan akan merilis 4.10 dalam minggu depan atau lebih, dengan perbaikan ini disertakan.

itu masih tidak berfungsi untuk saya, saya menggunakan junit 4.12

@1hanymhajna dapatkah Anda memberi kami test case minimal?

Tentu:
@RunWith(Parameterized.class)
kelas publik myClass {

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

@Kategori(kategorisaya.kelas)
@Uji
public void myTest(){
Assert.assertTrue(benar);
}

}

jika saya menjalankan tes ini tanpa kategori, ini berfungsi dengan baik untuk saya, tetapi jika saya menempatkan kategori dengan kelas berparameter, itu menimbulkan pengecualian dengan pesan kesalahan ini: Anotasi kategori pada kelas berparameter tidak didukung pada metode individual

@1hanymhajna terima kasih atas respon cepatnya.

Kami mungkin dapat melihat untuk memperbaikinya, tetapi di JUnit5 kami akan mendukung pengujian berparameter tanpa runner khusus. Saya sarankan mengajukan bug untuk memastikan JUnit5 mendukung kategori + parameter.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat