OK, então a @Ignore
anotação é boa para marcar que um caso de teste não deve ser executado.
No entanto, às vezes eu quero ignorar um teste com base em informações de tempo de execução. Um exemplo pode ser se eu tiver um teste de simultaneidade que precise ser executado em uma máquina com um certo número de núcleos. Se esse teste fosse executado em uma máquina uniprocessadora, não acho que seria correto apenas passar no teste (já que não foi executado) e certamente não seria correto falhar no teste e interromper a compilação .
Então, eu quero poder ignorar testes em tempo de execução, pois esse parece ser o resultado certo (já que a estrutura de teste permitirá que a compilação passe, mas registre que os testes não foram executados). Tenho certeza de que a anotação não me dará essa flexibilidade e suspeito que precisarei criar manualmente o conjunto de testes para a classe em questão. No entanto, a documentação não menciona nada sobre isso e, analisando a API , também não está claro como isso seria feito programaticamente (ou seja, como eu crio programaticamente uma instância Test
ou similar equivalente à criada pela @Ignore
anotação?).
Se alguém fez algo semelhante no passado, ou tem uma idéia brilhante de como mais eu poderia fazer isso, ficaria feliz em ouvir sobre isso.
fonte
@BeforeClass
anotação, onde você pode ter sua suposição falhada, o que ignorará toda a classe. Outra é@ClassRule
(para o controle refinado, mas sobre toda a classe, uma vez).Você deve fazer o checkout do
Junit-ext
projeto. Eles possuemRunIf
anotações que executam testes condicionais, como:[Exemplo de código retirado do tutorial]
fonte
Assume
diretamente para não introduzir outra dependência.@RunIf
separa a condição quando um teste deve ser executado a partir do código de teste real, o que eu acho bom. O que eu não gosto é que isso requer um corredor de teste específico. Portanto, escrevi uma regra JUnit para ignorar condicionalmente os testes.Na JUnit 4, outra opção para você pode ser criar uma anotação para indicar que o teste precisa atender aos seus critérios personalizados e, em seguida, estender o corredor padrão por conta própria e, usando a reflexão, baseie sua decisão nos critérios personalizados. Pode ser algo como isto:
fonte
BlockJUnit4ClassRunner
não oferece mais oisIgnored
método.Uma observação rápida:
Assume.assumeTrue(condition)
ignora o restante das etapas, mas passa no teste. Para falhar no teste, useorg.junit.Assert.fail()
dentro da instrução condicional. Funciona da mesma forma,Assume.assumeTrue()
mas falha no teste.fonte