Junit4: Categorias + Parametrizados ainda não funcionam no final 4.9 (# 74 reabrir?)

Criado em 24 ago. 2011  ·  8Comentários  ·  Fonte: junit-team/junit4

Receio que as categorias + dupla parametrizada ainda não funcionem corretamente com o junit 4.9 final fresco, mas após as alterações de # 74, o feedback é muito melhor do que o NPE sem mensagem. Observe que a classe de teste tem a anotação @Category no nível da classe.
O 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)

Trechos de código - importações omitidas por questões de brevidade, posso fornecer a você um projeto eclipse / formiga completo, se necessário.
O teste problemático:

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

}

A suíte:

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

}

Quando eu comento @Category em AdditionTest, o conjunto executa MultiplicationTest

bug parameterized regression

Todos 8 comentários

Pawel,

Obrigado pelo relatório do bug. Acho que o commit anexado vai consertar isso. Você tem tempo para dar uma olhada rápida nas próximas 24 horas? Obrigado.

Sim, vou tentar. Estarei de volta em algumas horas. Obrigada.

Funciona perfeitamente agora - muito obrigado.
Eu criei um branch de seu categorized_parameters_fix, construí junit4.10-SNAPSHOT e agora Parameterized e Category vivem juntos e felizes. Além do mais, verifiquei que o mesmo é verdadeiro (e realmente era antes) para teorias adicionadas a um conjunto, 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 alguma chance de a correção chegar ao 4.9.1?

Na verdade, estou pulando o 4.9.1 e lançarei o 4.10 na próxima semana ou assim, com esta correção incluída.

ainda não está funcionando para mim, estou usando o junit 4.12

@ 1hanymhajna você pode nos dar um caso de teste mínimo?

certo:
@RunWith (Parameterized.class)
public class myClass {

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

@Category (myCategory.class)
@Teste
public void myTest () {
Assert.assertTrue (true);
}

}

se eu executar este teste sem categoria, ele está funcionando bem para mim, mas se eu colocar categoria com classe parametrizada, ele lançará uma exceção com esta mensagem de erro: Anotações de categoria em classes parametrizadas não são suportadas em métodos individuais

@ 1hanymhajna obrigado pela resposta rápida.

Podemos possivelmente tentar consertar isso, mas no JUnit5 ofereceremos suporte a testes parametrizados sem um runner especial. Eu sugiro preencher um bug para garantir que o JUnit5 suporte categorias + parâmetros.

Esta página foi útil?
0 / 5 - 0 avaliações