Nenhum teste encontrado com o executor de teste 'JUnit 4'

105

Meu teste de Java funcionou bem no Eclipse. Mas agora, quando eu reinicio o teste no menu Executar, recebo a seguinte mensagem:

No tests found with test runner 'JUnit 4'

No .classpatharquivo, tenho todos os jararquivos e no final tenho:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

Como posso resolver esse erro e fazer com que os testes sejam executados novamente?

user281070
fonte
1
Você pode postar o conteúdo do seu teste (ou pelo menos a declaração da classe). Além disso, você escreveu "no final tem:" com nada mais.
phtrivier
verifique este .. deve ajudar stackoverflow.com/questions/22469480/junit-no-tests-found
prasad vsv
Para 5 de junho, veja aqui
Anand Rockzz

Respostas:

155

Isto somente aconteceu para mim. Reconstruir ou reiniciar o Eclipse não ajudou.

Resolvi isso renomeando um dos métodos de teste para começar com "teste ..." (estilo JUnit3) e, em seguida, todos os testes foram encontrados. Mudei o nome para o que era antes e ainda funciona.

Alemão
fonte
7
Eu tenho um método semelhante testQuotesa outros métodos que não começam com o teste, mas ainda recebo o erro Nenhum teste encontrado
Rachel
1
Tive o mesmo problema com uma classe que estende junit.framework.TestCase, e meus métodos precisavam começar com "teste". Em vez de estender TestCase, adicionei import: import static org.junit.Assert.*;e posso nomear meus métodos como quiser. Bizarro ...
MrDrews
6
Sério, mesmo se um teste for anotado com @Test, o nome da função de teste ainda precisa ser prefixado com "teste"?
Brian Shotola
4
Você também pode adicionar 2015 e Eclipse Luna a essa lista. Na verdade, muitos dos meus métodos @Test ainda começam com o prefixo "teste". I removido que prefixo de um teste, salvo, e, em seguida, foram encontrados todos os testes. Depois eu adicionei de volta e todos os testes continuaram a ser encontrados. Parece que se trata mais de alterar um método (arquivo?) De forma que o Eclipse redescubra tudo.
Brian White
2
Android Studio 2.1.1, maio de 2016, ainda funciona. Eu me pergunto se essa resposta funcionará até o fim do universo.
Blueriver
42

Quando recebemos esses erros, parece que o Eclipse está apenas confuso. Reinicie o Eclipse, atualize o projeto, limpe-o, deixe o Eclipse reconstruí-lo e tente novamente. Na maioria das vezes isso funciona como um encanto.

JamesG
fonte
1
Sim funcionou para mim também e concordo com dlamblin. Bom lembrete para sempre tentar reiniciar para qualquer problema estranho que não possa ser resolvido nos primeiros 5 minutos de estimulação.
Thien
3
Tive esse problema e fechei o arquivo de origem em que defini minha classe de teste, cliquei duas vezes nesse arquivo no navegador e funcionou. Portanto, fechar e reabrir o arquivo funcionou, sem reiniciar o Eclipse.
metamatt
11
isso realmente me faz querer procurar um novo IDE. isso funcionou para mim.
Seth M.,
1
fechar e reabrir o projeto consertou para mim!
Martin Charlesworth
34

No menu de contexto do diretório 'teste', escolha 'Caminho de construção' -> 'Usar como pasta de origem'. O Eclipse deve ver seus arquivos unitTests.java como arquivos de origem. Aviso 'Nenhum teste JUnit encontrado' ocorre porque não há arquivos unitTests.class em seu diretório 'build'

Dima
fonte
Esta é a solução que funciona para mim. Reiniciar não funciona.
Andree
Isso é o que eu estava procurando, já que não tenho que ter a pasta "test" na pasta "src". Fiz isso, abri / fechei o projeto conforme sugerido pelas outras respostas e agora ele compila e executa como um teste JUnit. Obrigado!
quux00
Fiz o mesmo selecionando o projeto -> Caminho de construção Java -> Fonte -> adicione a pasta de teste. Muito Obrigado!
Cláusula Peter de
Se src / test / groovy já estiver em seu caminho de construção como uma pasta de origem, remova-o e adicione-o novamente. Mais fácil do que remover e substituir @Test em cada arquivo de teste ...
geneSummons
32

Verifique se sua classe de teste estende "TestCase". em caso afirmativo, remova essa cláusula. Sua classe não precisa estender da classe "TestCase". É a maioria dos casos que conheci.

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

Seguir o TestCase deve ser bom.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine
nefilim
fonte
Na verdade, é a resposta correta. Eu testei com IntelliJ e JUnit 4.1 e funciona!
Dio Phung,
O problema que estou enfrentando é que, no eclipse, meus testes JUnit funcionam bem, mas quando os exporto para um JAR, recebo o erro acima. Alguma ideia?
tryToLearn
É o contrário hoje em dia? Adicionar "extends TestCase" resolveu o problema para mim.
Heinzlmaen
Funcionou para mim !!! Obrigado
JRichardsz
27

Eu estava enfrentando o mesmo problema e depurei-o com exemplos ruins na web e internos do junit. Basicamente, não faça sua classe estender TestCase como alguns exemplos mostram para Junit 4.x. Use algum teste de convenção de nomenclatura ou se quiser ter uma anotação, pode usar @RunWith (JUnit4.class).

Se você precisar acessar métodos de assert, estenda Assert ou use importações estáticas.

Se sua classe estender TestCase, mesmo se você usar o Junit 4 Runner, ele será executado como 3. Isso ocorre porque no código de inicialização há detecção:

Veja JUnit3Builder e as linhas:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

Isso retorna verdadeiro e o teste de compatibilidade com junit4 não será tentado.

Toomasr
fonte
2
Isso resolveu o problema para mim. Se você estiver olhando para os exemplos mais antigos de como usar o Junit primeiro, eles o levarão ao erro.
Alex Kilpatrick
"Se sua classe estender TestCase, mesmo que você use o Junit 4 Runner, ele será executado como 3" - isso não é verdade (pelo menos para Groovy e Intellij IDEA). Estou usando o JUnit 4.12 e @RunWith(JUnit4)anotei a classe com e estendido de "GroovyTestCase". Sem @RunWith(JUnit4)eu enfrento os mesmos problemas.
Veaceslav Gaidarji
O comportamento ainda é o mesmo de 2017 (JUnit 4.12).
sharmaap de
5

Tente adicionar

@Teste acima do método para o teste como este

@Test
public void testParse()
{

}
Mike Choi
fonte
5

Outra solução possível que vou lançar no ringue: não fui capaz de executar a classe de teste nem na janela do editor, nem no Package Explorer, mas clicando com o botão direito do mouse no nome da classe na visualização Outline e selecionando Run As JUnit O teste funcionou ... Vai entender!

Matthew Wise
fonte
mesmo, da visualização do esboço funciona, todo o resto não - eu tentei todas as soluções postadas em 3 threads de estouro de pilha, nada funciona
MPSL
Isso funciona para mim também, mas é inútil para testar a cobertura em um projeto.
rico
4

Sem roupas de teste no JUnit4. Em vez disso, use anotações ou convenções de nomes JUnit3 antigas.

Exemplo:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
Roman C
fonte
4

Isso também me aconteceu. Tentei reiniciar o Eclipse e também prefixei meus métodos de teste com testes. Nenhum funcionou.

A seguinte etapa funcionou: Altere todos os seus métodos de teste presentes em @BeforeClass e @AfterClass para métodos estáticos.

ou seja, se você tiver seu método de teste no formato abaixo:

@BeforeClass
public void testBeforeClass(){
}

então mude para:

@BeforeClass
public static void testBeforeClass(){
}

Isso funcionou para mim.

Revindran
fonte
4

Eu descobri a resposta:

Recebi este erro quando executei o teste autônomo do eclipse (clique com o botão direito no método e escolha executar como teste junit),

Quando executei a aula completa como teste junit o teste foi executado corretamente com os parâmetros.

Eyal Zamir
fonte
3

Quando eu enfrento esse problema, eu apenas edito o arquivo e salvo ele ... funciona perfeitamente

Mahesh
fonte
1
Olá, amigo, seja bem-vindo ao Stackoverflow! :) Você poderia elaborar sua resposta?
Littm
@Mahesh Você quer dizer atualizar o arquivo (selecione-o e pressione F5)
Cassian
Estou enfrentando o mesmo problema do scala, ou seja, meus testes foram escritos para JUnit4, mas eles estão no scala. E a solução, como @Mahesh sugere, é dar um chute no compilador. Não importa o que você faça ao editar o arquivo, você apenas precisa editá-lo. Eu digito algo que dá um erro de sintaxe, salvo o arquivo, desfaço e salvo novamente. De repente, meus testes são executados. Isso acontece comigo com frequência, ou seja, pelo menos todos os dias, geralmente várias vezes por dia.
Erick G. Hagstrom
3

Meu problema é que a declaração import org.junit.Test;desapareceu (ou não foi adicionada?). Depois de adicioná-lo, tive que remover outra importdeclaração (o Eclipse vai dar uma dica para você) e tudo começou a funcionar novamente.

Sergii
fonte
3

Muito tarde, mas o que resolveu o problema para mim foi que todos os nomes dos meus métodos de teste começavam com letras iniciais: "public void Test". Fazer o t minúsculo funcionou.

Josh T
fonte
isso funciona para mim ... mas esta é uma solução estranhamente confusa
Anchit Mittal
2

Tentei a solução de Germán. Funcionou para todos os métodos da minha aula, mas tenho muitas aulas no meu projeto.

Então, tentei remover do caminho de construção e adicioná-lo novamente. Funcionou perfeitamente.

Espero que ajude.

Footix29
fonte
2

Seis anos depois ... e ainda há problemas com Eclipse e ocasionalmente não encontrando JUnits.

Em meu Eclipse Mars 2, descobri que ele não reconhecerá as classes de teste puxadas do git se houver mais de 9 ou 10 @Testanotações no arquivo. Preciso comentar todos os testes extras, executar a classe de teste e, em seguida, descomentar e executar a classe novamente. Vai saber...

SimonB
fonte
Esta resposta aqui é útil, eu não tive exatamente a mesma situação, mas os nomes dos métodos de teste eram bastante semelhantes e o eclipse teve problemas para encontrá-los. Como testCase01, testCare02 ... Tive que comentar outros métodos "testCasexx" para executar testCase01 ou então ele lançaria uma exceção. Tornar todos os métodos de teste PÚBLICOS parece ter resolvido este problema !!
01000001
1

Pode ser que sua configuração de inicialização JUnit fosse para uma classe de teste individual, e você de alguma forma mudou essa configuração para "executar todos os testes em uma pasta de origem, pacote ou projeto"

Mas isso pode disparar a mensagem de erro "Nenhum teste encontrado com o executor de teste 'JUnit 4'".

Ou você fez uma modificação em sua classe de teste, removendo a @Testanotação.
Veja esta página wiki .

VonC
fonte
@Test está aqui, a mensagem é: não foi possível obter a classe principal toto.lolo.testrunner (que é especificado na configuração de execução)
usuário281070
@lamisse: então, algum tipo de problema de classpath? ou um problema de syntex: deveria ser toto.lolo.Testrunnere não toto.lolo.testrunner('T')
VonC
@lamisse: "toto.lolo.Testrunner" é o nome real da sua classe TestRunner? É algo que você escreveu? O projeto / jar que o contém está no classpath de sua configuração de inicialização?
phtrivier
1

Eu também enfrentei o mesmo problema ao executar o teste JUnit. Resolvi isso colocando a anotação @Test logo acima da função de teste principal.

Rajith
fonte
1

O que consertou meu caso foi semelhante à resposta de @JamesG: reiniciei o Eclipse, reconstruí o projeto e atualizei-o; MAS antes de fazer qualquer uma dessas coisas, primeiro fechei o projeto (clique com o botão direito do mouse no pacote explorer -> Fechar projeto) e depois o abri novamente. Então funcionou.

Uma solução alternativa que encontrei antes de encontrar a solução definitiva que acabei de descrever: copie a classe de teste e execute a classe de teste como JUnit.

Cellepo
fonte
1

Verifique se a pasta em que seus testes estão é uma pasta de origem. Caso contrário, clique com o botão direito e use como pasta de origem.

Todor Kolev
fonte
1

Fechar e abrir o projeto funcionou para mim.

user3022123
fonte
1

Existe outra chance, você pode ter alterado o Junit Test da versão anterior (por exemplo, Junit 3) para o Junit 4. É assim seguir os passos abaixo: -

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.
Kundan Atre
fonte
1

Adicione @Testem cima do seu teste.
Passe o mouse até a anotação.
Escolha 'adicionar biblioteca junit 4 ao classpath'

Mike
fonte
0

O seu projeto Eclipse é baseado? Nesse caso, pode ser necessário atualizar a versão m2eclipse.

Apenas uma nota rápida: eu tenho um projeto no Eclipse que é baseado no maven e gerado inicialmente usando o assistente "novo projeto maven" no Eclipse. Estou usando JUnit 4.5 para os testes de unidade e poderia facilmente executar os testes da linha de comando usando maven, e testes individuais do Eclipse usando run as JUnit test .... No entanto, quando tentei executar todos os testes no projeto, chamando run as JUnit test ... no nó raiz do projeto, Eclipse reclamou " nenhum teste encontrado com o executor de teste junit 4 ". Resolvido atualizando m2eclipse para a última compilação de desenvolvimento estável do site de atualização m2eclipse (especificamente, eu atualizei da versão 0.9.8.200905041414 para a versão 0.9.9.200907201116 no Eclipse Galileo).

A partir daqui: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

caldo
fonte
Não entendo, não acho que seja relacionado à versão do eclispe, meu teste funcionou ontem e não é o caso agora por causa do pop-up de lançamento do Junit, há uma maneira de restabelecer a minha primeira configuração?
user281070
Lamisse, também estou confuso. Sugiro que você atualize sua pergunta para explicar quando a execução do teste de unidade funciona e quando não funciona.
b.roth
0

Isso aconteceu comigo também. Descobri que no Eclipse não criei um novo arquivo Java Class e é por isso que não estava compilando. Tente copiar seu código em um arquivo de classe java se ainda não estiver lá e compile.

Anna
fonte
0

Descobri que o Eclipse parece realizar apenas testes de estilo JUnit 3 se sua classe de teste estender de TestCase. Se você remover a herança, as anotações funcionaram para mim.

Esteja ciente de que você precisa importar estaticamente todos os assert*métodos necessários , como import static org.junit.Assert.*.

Martin C.
fonte
0

Tive que fazer um mvn clean na linha de comando e então project-> clean in Eclipse. Eu renomeei a classe com antecedência e depois a renomeei, mas duvido que tenha ajudado.

joe outro lado
fonte
0

Também estou executando o Eclipse com Maven (m2e 1.4). Os testes foram executados com Maven, mas não com Eclipse ... mesmo após várias aplicações de Maven>Update project.

Minha solução foi adicionar algumas linhas no .classpath gerado por m2e. As linhas agora estão grudando.

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>
pascal
fonte
0

Eu tenho esse problema de vez em quando. O que mais resolve o problema para mim é executar o teste JUnit em Configurações de execução ... garantindo que JUnit 4 seja definido como o executor de teste.

Geralmente, vejo esse problema ao tentar executar o teste Executar como ... Junit no menu de contexto do Package Explorer. Se você clicar com o botão direito do mouse no código do teste que está tentando executar e, em vez de selecionar Executar como ... Teste Junit, selecione Executar configurações ... certifique-se de que o projeto, a classe de teste e o executor de teste estejam definidos corretamente, clicando em aplicar e executar funciona o tempo todo para mim.

theINtoy
fonte
0

Comecei a trabalhar com Selenium e Eclipse em meu trabalho e estava fazendo meu primeiro teste automatizado e excluí do código @Before, @Test e @After notes e estava tendo o problema "Nenhum teste encontrado com o executor de teste junit4" .

Minha solução foi simplesmente adicionar novamente as notas @Before, @Test e @After e com isso meu script funcionou. É importante não excluir isso do código.

Este é um teste simples que usa o Google para pesquisar algo:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}
JuanTorre
fonte
0

Usando ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe), eu estava tendo um problema semelhante com o Right Click Scala Test Class-> Run As -> Scala Junit Test menu de contexto.

Tentei editar a aula (mas não por falha de compilação), limpar, fechar o projeto, fechar o Eclipse. Nenhum deles funcionou para restaurar o menu de contexto para classes que anteriormente funcionavam bem. As classes de teste não usam a @Testanotação e, em vez disso, usam o@RunWith(classOf[JUnitRunner]) anotação no topo da classe usando o código ScalaTest.

Quando eu tentei escolher Scala Junit Test diretamente no editor de inicialização Run Configuration, recebi a caixa de diálogo da pergunta. A resposta de Footix29 foi a chave para mim.

Percebi que, embora tenha limpado meu projeto algumas vezes, minhas classes no diretório / bin não eram realmente reconstruídas há algum tempo.

Veja como voltei ao menu de contexto e consegui executar Scala Junit Tests:

  • manuallylimpou as classes excluindo o /bin/<package dir>*via Explorer
  • Project -> Cleaned o projeto junto com uma reconstrução completa

Suspeito que uma edição de classe em geral é capaz de limpar algum estado salvo do Eclipse e colocá-lo em funcionamento novamente. No meu caso, todas as classes de trabalho anteriores que tentei falharam, então a manualetapa de limpeza foi apenas o martelo de que eu precisava. No entanto, outros truques que afetam o conceito do Eclipse do caminho da classe / estado de construção também devem funcionar.

Além disso, acho que esse comportamento foi acionado em parte pela tentativa de refatorar uma classe Scala renomeando-a (o que o IDE Scala Eclipse é uma merda), onde toda a limpeza após a mudança inicial do arquivo é manual. Não houve erros de construção, mas também não houve avisos de que eu esperava, o que significa que algo estava definitivamente preso nas informações de estado de construção do Eclipse.

n0741337
fonte