Junit4: Categorías + Parametrizado todavía no funciona en 4.9 final (¿# 74 reabrir?)

Creado en 24 ago. 2011  ·  8Comentarios  ·  Fuente: junit-team/junit4

Me temo que el dúo de categorías + parametrizado todavía no funciona correctamente con el nuevo junit 4.9 final, sin embargo, después de los cambios n. ° 74, la retroalimentación es mucho mejor que la NPE sin mensajes. Tenga en cuenta que la clase de prueba tiene una anotación
El 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)

Fragmentos de código: importaciones omitidas por brevedad, puedo proporcionarle un proyecto completo de eclipse / hormiga si es necesario.
La prueba problemática:

@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 {

}

Cuando comento la @Category en AdditionTest, la suite ejecuta MultiplicationTest bien (contiene métodos de prueba "normales", también tiene @Category a nivel de clase).

bug parameterized regression

Todos 8 comentarios

Pawel,

Gracias por reportar el error. Creo que la confirmación adjunta lo solucionará. ¿Tiene tiempo para echarle un vistazo rápido en las próximas 24 horas? Gracias.

Sí, lo intentaré. Regresare en unas horas. Gracias.

Funciona perfectamente ahora, muchas gracias.
Creé una rama de su categorized_parameters_fix, construí junit4.10-SNAPSHOT y ahora Parameterized y Category viven juntos felizmente. Además, verifiqué que lo mismo es cierto (y de hecho lo era antes) para las teorías agregadas a una suite, como:

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

¿Existe alguna posibilidad de que la solución llegue a 4.9.1?

En realidad, me estoy saltando 4.9.1 y lanzaré 4.10 en la próxima semana, con esta corrección incluida.

todavía no me funciona, estoy usando junit 4.12

@ 1hanymhajna, ¿puedes darnos un caso de prueba mínimo?

seguro:
@RunWith (clase parametrizada)
public class myClass {

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

@Category (myCategory.class)
@Prueba
public void myTest () {
Assert.assertTrue (verdadero);
}

}

si ejecuto esta prueba sin categoría, funciona bien para mí, pero si pongo una categoría con una clase parametrizada, arroja una excepción con este mensaje de error: las anotaciones de categoría en las clases parametrizadas no son compatibles con los métodos individuales

@ 1hanymhajna gracias por la rápida respuesta.

Posiblemente podamos buscar arreglar esto, pero en JUnit5 admitiremos pruebas parametrizadas sin un corredor especial. Sugiero presentar un error para garantizar que JUnit5 admita categorías y parámetros.

¿Fue útil esta página
0 / 5 - 0 calificaciones