Mudei para JUnit4.4 de JUnit3.8. Eu executo meus testes usando formiga, todos os meus testes são executados com sucesso, mas as classes de utilitário de teste falham com o erro "Nenhum método executável". O padrão que estou usando é incluir todas as classes com o nome * Teste * na pasta de teste.
Eu entendo que o corredor não consegue encontrar nenhum método anotado com o atributo @Test. Mas eles não contêm essa anotação porque essas classes não são testes. Surpreendentemente, ao executar esses testes no Eclipse, ele não reclama dessas classes.
No JUnit3.8 não era um problema, pois essas classes de utilitários não estendiam o TestCase, então o executor não tentava executá-los.
Eu sei que posso excluir essas classes específicas no destino junit no script de formigas. Mas não quero alterar o arquivo de compilação a cada nova classe de utilitário que adicionar. Também posso renomear as classes (mas dar bons nomes às classes sempre foi meu talento mais fraco :-))
Existe alguma solução elegante para este problema?
Respostas:
Supondo que você esteja no controle do padrão usado para localizar as classes de teste, sugiro alterá-lo para corresponder em
*Test
vez de*Test*
. AssimTestHelper
não haverá correspondência, masFooTest
sim.fonte
Anote suas classes de utilitários com @Ignore. Isso fará com que o JUnit não tente executá-los como testes.
fonte
Meu caso específico apresenta o seguinte cenário. Nossos testes
todos estendem
e JUnit estava tentando executar BaseTixContainerTest. O pobre BaseTixContainerTest estava apenas tentando configurar o container, configurar o cliente, pedir pizza e relaxar ... cara.
Conforme mencionado anteriormente, você pode anotar a classe com
Mas isso fez com que o JUnit relatasse aquele teste como ignorado (em oposição a completamente ignorado).
Isso meio que me irritou.
Portanto, tornei BaseTixContainerTest abstrato e agora JUnit realmente o ignora.
fonte
@Ignore
Para evitar que JUnit instancie sua classe base de teste, basta torná-la
(@Ignore relata como ignorado, o que reservo para testes temporariamente ignorados.)
fonte
protected abstract class
.fonte
Tenha cuidado ao usar um preenchimento de código IDE para adicionar a importação
@Test
.Tem que ser
import org.junit.Test
e nãoimport org.testng.annotations.Test
, por exemplo. Se você fizer o último, obterá o erro "nenhum método executável".fonte
org.junit.jupiter.api.Test
! mas graças a você está resolvido agoraO Ant agora vem com o
skipNonTests
atributo que foi projetado para fazer exatamente o que você parece estar procurando. Não há necessidade de alterar suas classes base para abstrair ou adicionar anotações a elas.fonte
skipNonTests
atributo só está disponível no ant 1.9+, o que é uma pena, pois parece incrivelmente útil. Também excluirá superclasses de testes abstratos.Que tal adicionar um método de teste vazio a essas classes?
fonte
Em sua classe de teste, se escreveu import org.junit.jupiter.api.Test; exclua-o e escreva import org.junit.Test; Neste caso também funcionou para mim.
fonte
@BeforeAll
e@AfterAll
não são executados.@BeforeClass
e@AfterClass
, mas JUnit5 não. Referência: junit.org/junit5/docs/current/user-guide/#migrating-from-junit4Eu também estava enfrentando um problema semelhante ("nenhum método executável ..") ao executar a parte mais simples do código (usando @Test, @Before etc.) e não encontrei a solução em lugar nenhum. Eu estava usando Junit4 e Eclipse SDK versão 4.1.2. Resolvi meu problema usando o Eclipse SDK 4.2.2 mais recente. Espero que isso ajude as pessoas que estão lutando com um problema semelhante.
fonte