Nessun test trovato con il test runner 'JUnit 4'


105

Il mio test Java ha funzionato bene da Eclipse. Ma ora, quando riavvio il test dal menu di esecuzione, ricevo il seguente messaggio:

No tests found with test runner 'JUnit 4'

Nel .classpathfile ho tutti i jarfile e alla fine ho:

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

Come posso risolvere questo errore e riavviare i test?


1
Puoi pubblicare il contenuto del tuo test (o almeno la dichiarazione di classe). Inoltre hai scritto "alla fine ho:" con nient'altro.
phtrivier

controllare questo .. si dovrebbe aiutare stackoverflow.com/questions/22469480/junit-no-tests-found
Prasad VSV

Per junit 5 vedi qui
Anand Rockzz

Risposte:


156

questo è appena successo a me. La ricostruzione o il riavvio di Eclipse non ha aiutato.

L'ho risolto rinominando uno dei metodi di test per iniziare con "test ..." (stile JUnit3) e quindi tutti i test sono stati trovati. L'ho rinominato come era in precedenza e funziona ancora.


7
Ho un metodo simile testQuotesad altri metodi che non iniziano con il test, ma ricevo comunque errore Nessun test trovato
Rachel,

1
Ho avuto lo stesso problema con una classe che si estende junit.framework.TestCasee i miei metodi dovevano iniziare con "test". Piuttosto che estendere TestCase, ho aggiunto un'importazione: import static org.junit.Assert.*;e posso nominare i miei metodi come voglio. Bizzarro ...
MrDrews

6
Seriamente, anche se un test è annotato con @Test, il nome della funzione di test deve ancora essere preceduto da "test"?
Brian Shotola

4
Puoi anche aggiungere 2015 ed Eclipse Luna a quella lista. In realtà molti dei miei metodi @Test iniziano ancora con il prefisso "test". Ho rimosso quel prefisso in un test, salvato e quindi sono stati trovati tutti i test. Successivamente l'ho aggiunto di nuovo e tutti i test hanno continuato a essere trovati. Sembra che si tratti più di cambiare un metodo (file?) In modo tale che Eclipse riscopra tutto.
Brian White

2
Android Studio 2.1.1, maggio 2016, funziona ancora. Mi chiedo se questa risposta funzionerà fino alla fine dell'universo.
Blueriver

42

Quando otteniamo questi errori, sembra che Eclipse sia solo confuso. Riavvia Eclipse, aggiorna il progetto, puliscilo, lascia che Eclipse lo ricostruisca e riprova. La maggior parte delle volte funziona come un incantesimo.


1
Sì ha funzionato anche per me e sono d'accordo con dlamblin. Buon promemoria per provare sempre a riavviare per qualsiasi strano problema che non può essere risolto nei primi 5 minuti di sollecitazione.
Thien

3
Ho avuto questo problema e ho chiuso il file sorgente in cui avevo definito la mia classe di test, ho fatto doppio clic su quel file nel navigatore e ha funzionato. Quindi la chiusura e la riapertura del file ha funzionato, senza riavviare Eclipse.
metamatt

11
questo mi fa davvero venire voglia di cercare un nuovo IDE. questo ha funzionato per me.
Seth M.

1
chiudendo e riaprendo il progetto è stato risolto per me!
Martin Charlesworth

34

Nel menu contestuale della tua directory "test" scegli "Build path" -> "Use as a source folder". Eclipse dovrebbe vedere i tuoi file unitTests.java come file sorgente. L'avviso "Nessun test JUnit trovato" si verifica perché non sono presenti file unitTests.class nella directory "build"


Questa è la soluzione che funziona per me. Il riavvio non funziona.
Andree

Questo è quello che stavo cercando dato che devo avere la cartella "test" non nella cartella "src". L'ho fatto, quindi ho aperto / chiuso il progetto come suggerito dalle altre risposte e ora si compila e funziona come un test JUnit. Grazie!
quux00

Ho fatto lo stesso selezionando il progetto -> Percorso build Java -> Sorgente -> aggiungi la cartella di test. Grazie molto!
Peter Clause

Se src / test / groovy è già nel percorso di compilazione come cartella di origine, rimuovilo e aggiungilo di nuovo. Più facile che rimuovere e sostituire @Test in ogni file di test ...
geneSummons

32

Controlla se la tua classe di test estende "TestCase". in tal caso, rimuovere quella clausola. Non è necessario che la tua classe si estenda dalla classe "TestCase". È la maggior parte dei casi che ho incontrato.

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

Il seguente TestCase dovrebbe andare bene.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine

È davvero la risposta corretta. L'ho testato con IntelliJ e JUnit 4.1 e funziona!
Dio Phung

Il problema che sto affrontando è che, in eclipse, i miei test JUnit funzionano correttamente, ma quando li esporto in un JAR, ottengo l'errore precedente. Qualche idea?
tryToLearn

È il contrario in questi giorni? L'aggiunta di "extends TestCase" ha risolto il problema per me.
Heinzlmaen,

Ha funzionato per me !!! Grazie
JRichardsz

27

Stavo affrontando lo stesso problema e ho eseguito il debug su cattivi esempi sul web e sugli interni di junit. Fondamentalmente non fare in modo che la tua classe estenda TestCase come mostrano alcuni esempi per Junit 4.x. Usa un test di convenzione di denominazione o se vuoi avere un'annotazione puoi usare @RunWith (JUnit4.class).

Se è necessario accedere ai metodi di asserzione, estendere Assert o utilizzare importazioni statiche.

Se la tua classe estende TestCase, anche se usi Junit 4 Runner verrà eseguito come 3. Questo perché nel codice di inizializzazione c'è il rilevamento:

Vedi JUnit3Builder e le linee:

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

Questo restituisce true e il test per la compatibilità con junit4 non verrà provato.


2
Questo ha risolto il problema per me. Se stai guardando prima i vecchi esempi di come usare Junit, ti porteranno fuori strada.
Alex Kilpatrick

"Se la tua classe estende TestCase, anche se usi Junit 4 Runner verrà eseguita come 3" - questo non è vero (almeno per Groovy e Intellij IDEA). Sto usando JUnit 4.12 e ho annotato la classe con @RunWith(JUnit4)ed estesa da "GroovyTestCase". Senza @RunWith(JUnit4)affrontare gli stessi problemi.
Veaceslav Gaidarji

Il comportamento è sempre lo stesso del 2017 (JUnit 4.12).
sharmaap

5

Prova ad aggiungere

@ Prova sopra il metodo per il test in questo modo

@Test
public void testParse()
{

}

5

Un'altra possibile soluzione che metterò sul ring: non sono stato in grado di eseguire la classe di test né dalla finestra dell'editor, né da Package Explorer, ma facendo clic con il pulsante destro del mouse sul nome della classe nella vista Struttura e selezionando Esegui come JUnit Il test ha funzionato ... Vai a capire!


stesso, dalla vista struttura funziona, tutto il resto no - ho provato ogni soluzione pubblicata in 3 thread di overflow dello stack, niente funziona
MPSL

Funziona anche per me, ma è inutile per testare la copertura in un progetto.
ricco

4

Nessuna tuta di prova in JUnit4. Usa invece le annotazioni o usa le vecchie convenzioni dei nomi JUnit3.

Esempio:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})

4

Questo è successo anche a me. Ho provato a riavviare Eclipse e ho anche prefissato i miei metodi di test con i test. Nessuno dei due ha funzionato.

Il passaggio seguente ha funzionato: modifica tutti i metodi di test presenti in @BeforeClass e @AfterClass in metodi statici.

cioè se hai il tuo metodo di prova nel formato seguente:

@BeforeClass
public void testBeforeClass(){
}

quindi modificalo in:

@BeforeClass
public static void testBeforeClass(){
}

Questo ha funzionato per me.


4

Ho scoperto la risposta:

Ho ricevuto questo errore quando ho eseguito il test autonomo da eclipse (fai clic con il pulsante destro del mouse sul metodo e scegli di eseguire come test junit),

Quando ho eseguito la classe completa come test junit il test è stato eseguito correttamente con i parametri.


3

Quando affronto questo problema, modifico il file e lo salvo ... funziona a meraviglia


1
Ciao amico e benvenuto in Stackoverflow! :) Potresti elaborare la tua risposta?
Littm

@Mahesh Intendi aggiornare il file (selezionalo e premi F5)
Cassian

Sto affrontando lo stesso problema da scala, cioè i miei test sono scritti per JUnit4 ma sono in scala. E la soluzione, come suggerisce @Mahesh, è dare un calcio al compilatore. Non importa cosa fai quando modifichi il file, devi solo modificarlo. Digito qualcosa che restituisce un errore di sintassi, salvo il file, quindi annullo e salvo di nuovo. All'improvviso i miei test vengono eseguiti. Questo mi succede spesso, cioè almeno ogni giorno, di solito più volte al giorno.
Erick G. Hagstrom

3

Il mio problema era che la dichiarazione import org.junit.Test;era scomparsa (o non era stata aggiunta?). Dopo averlo aggiunto, ho dovuto rimuovere un'altra importdichiarazione (Eclipse ti suggerirà quale) e tutto ha ripreso a funzionare.


3

Molto tardi, ma ciò che ha risolto il problema per me è stato che i nomi dei miei metodi di test iniziavano tutti con lettere maiuscole: "public void Test". Far funzionare la t minuscola.


questo funziona per me ... ma questa è stranamente una soluzione confusa
Anchit Mittal

2

Ho provato la soluzione di Germán. Ha funzionato per tutti i metodi della mia classe, ma ho molte classi nel mio progetto.

Quindi ho provato a rimuovere dal percorso di compilazione e quindi ad aggiungerlo di nuovo. Ha funzionato perfettamente.

Spero che sia d'aiuto.


2

Sei anni dopo ... e ci sono ancora problemi con Eclipse e occasionalmente non riescono a trovare JUnits.

Nel mio Eclipse Mars 2 ho scoperto che non riconoscerà le classi di test estratte da git se ci sono più di 9 o 10 @Testannotazioni nel file. Ho bisogno di commentare eventuali test extra, eseguire la classe di test, quindi rimuoverli e rieseguire la classe. Vai a capire...


Questa risposta qui è utile, non ho avuto esattamente la stessa situazione, ma i nomi dei metodi di test erano abbastanza simili ed eclipse ha avuto problemi a trovarli. Come testCase01, testCare02 ... Ho dovuto commentare altri metodi "testCasexx" per eseguire testCase01 oppure genera un'eccezione. Rendere PUBBLICI tutti i metodi di prova sembra aver risolto questo problema !!
01000001

1

Potrebbe essere che la configurazione di avvio di JUnit fosse per una singola classe di test e in qualche modo hai modificato quella configurazione per "eseguire tutti i test in una cartella di origine, pacchetto o progetto"

Ma ciò potrebbe attivare il messaggio di errore "Nessun test trovato con il test runner 'JUnit 4'".

Oppure hai fatto una modifica nella tua classe di test, rimuovendo l' @Testannotazione.
Vedi questa pagina wiki .


@Test è qui, il messaggio è: non è stato possibile rimuovere la classe principale toto.lolo.testrunner (che è specificato nella configurazione di esecuzione)
user281070

@lamisse: quindi, qualche tipo di problema di classpath? o un problema di sintassi: dovrebbe essere toto.lolo.Testrunnere non toto.lolo.testrunner('T')
VonC

@lamisse: "toto.lolo.Testrunner" è il vero nome della tua classe TestRunner? È qualcosa che hai scritto? Il progetto / jar lo contiene nel classpath della configurazione di avvio?
phtrivier

1

Ho anche riscontrato lo stesso problema durante l'esecuzione del test JUnit. Ho risolto questo problema inserendo l'annotazione @Test appena sopra la funzione di test principale.


1

Ciò che ha risolto il mio caso era simile alla risposta di @ JamesG: ho riavviato Eclipse, ricostruito il progetto e aggiornato; MA prima di fare tutto ciò, ho chiuso il progetto (fai clic con il pulsante destro del mouse sul progetto in Esplora pacchetti -> Chiudi progetto) e quindi l'ho riaperto. Poi ha funzionato.

Una soluzione alternativa che ho trovato prima di trovare quella soluzione definitiva che ho appena descritto: copiare la classe di test ed eseguire la classe di test come JUnit.


1

Controlla se la cartella in cui si trovano i tuoi test è una cartella di origine. In caso contrario, fare clic con il pulsante destro del mouse e utilizzare come cartella di origine.



1

C'è un'altra possibilità, potresti aver cambiato Junit Test dalla versione inferiore (ad esempio Junit 3) a Junit 4. È così seguire i passaggi seguenti: -

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.

1

Aggiungi @Testin cima al tuo test.
Passa il mouse sull'annotazione.
Scegli 'aggiungi libreria junit 4 a classpath'


0

Il tuo progetto Eclipse è basato su un esperto? In tal caso, potrebbe essere necessario aggiornare la versione m2eclipse.

Solo una breve nota: ho un progetto in Eclipse che è basato su Maven, e generato inizialmente utilizzando la procedura guidata "nuovo progetto Maven" in Eclipse. Sto usando JUnit 4.5 per gli unit test e potrei tranquillamente eseguire i test dalla riga di comando usando Maven, e singoli test da Eclipse usando run as JUnit test ... Tuttavia, quando ho provato a eseguire tutti i test nel progetto invocando run as JUnit test ... sul nodo radice del progetto, Eclipse si è lamentato " nessun test trovato con il test runner junit 4 ". Risolto aggiornando m2eclipse all'ultima build di sviluppo stabile dal sito di aggiornamento m2eclipse (in particolare, ho aggiornato dalla versione 0.9.8.200905041414 alla versione 0.9.9.200907201116 in Eclipse Galileo).

Da qui: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html


Non capisco, non credo che sia correlato alla versione eclispe, il mio test ha funzionato ieri e non è così ora a causa del popup di lancio di Junit c'è un modo per ripristinare la mia prima configurazione?
user281070

Lamisse, anch'io sono confuso. Ti suggerisco di aggiornare la tua domanda per spiegare quando l'esecuzione di unit test funziona e quando non funziona.
b

0

È successo anche a me. Ho scoperto che in Eclipse non avevo creato un nuovo file Java Class ed è per questo che non si stava compilando. Prova a copiare il codice in un file di classe java se non è già presente e quindi compila.


0

Ho scoperto che Eclipse sembra eseguire solo test in stile JUnit 3 se la tua classe di test si estende da TestCase. Se rimuovi l'eredità, le annotazioni hanno funzionato per me.

Fai attenzione che devi importare staticamente tutti i assert*metodi richiesti come import static org.junit.Assert.*.


0

Ho dovuto eseguire un mvn clean sulla riga di comando, quindi project-> clean in eclipse. Ho rinominato la classe in anticipo, quindi l'ho rinominata di nuovo, ma dubito che sia stato d'aiuto.


0

Sto anche eseguendo Eclipse con Maven (m2e 1.4). I test erano in esecuzione con Maven, ma non con Eclipse ... anche dopo diverse applicazioni di Maven>Update project.

La mia soluzione è stata quella di aggiungere alcune linee nel .classpath generato da m2e. Le linee ora si attaccano.

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

0

Di tanto in tanto ho questo problema. La cosa che risolve maggiormente il problema per me è eseguire il test JUnit dalle configurazioni Run ... assicurandomi che JUnit 4 sia impostato come test runner.

In generale, vedo questo problema quando tento di eseguire come ... Junit test dal menu di scelta rapida in Esplora pacchetti. Se fai clic con il pulsante destro del mouse sul codice per il test che stai tentando di eseguire e invece di selezionare Esegui come ... Junit Test selezioni Esegui configurazioni ... assicurati che il progetto, la classe di test e il test runner siano impostati correttamente, facendo clic su applica, quindi esegui funziona tutto il tempo per me.


0

Ho iniziato a lavorare con Selenium ed Eclipse nel mio lavoro e stavo facendo il mio primo test automatico e ho cancellato dal codice @Before, @Test e @After note e stavo riscontrando questo problema "Nessun test trovato con test runner junit4" .

La mia soluzione è stata semplicemente aggiungere di nuovo le note @Before, @Test e @After e con questo il mio script ha funzionato. È importante non eliminarlo dal codice.

Questo è un semplice test che utilizza Google per cercare qualcosa:

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

}

0

Utilizzando ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) ho riscontrato un problema simile con il Right Click Scala Test Class-> Run As -> Scala Junit Testmenu contestuale.

Ho provato a modificare la classe (ma non per un errore di compilazione), pulire, chiudere il progetto, chiudere Eclipse. Nessuno di questi ha funzionato per ripristinare il menu contestuale per le classi che in precedenza avevano funzionato bene. Le classi di test non usano l' @Testannotazione e invece usano l' @RunWith(classOf[JUnitRunner])annotazione all'inizio della classe usando il codice ScalaTest.

Quando ho provato a scegliere Scala Junit Test direttamente dall'editor di avvio di Esegui configurazione, ho ricevuto la finestra di dialogo dalla domanda. La risposta di Footix29 è stata la chiave per me.

Notai che anche se avevo ripulito il mio progetto alcune volte, le mie classi nella directory / bin non erano state effettivamente ricostruite da un po '.

Ecco come sono tornato al menu contestuale e sono stato in grado di eseguire nuovamente Scala Junit Tests:

  • manuallyripulito le classi eliminando il /bin/<package dir>*tramite Explorer
  • Project -> Cleaned il progetto insieme a una ricostruzione completa

Sospetto che una modifica di classe in generale sia in grado di pulire alcuni stati salvati di Eclipse e ripristinarli. Nel mio caso tutte le classi lavoratrici che avevo provato in precedenza avevano fallito, quindi il manualpasso pulito era solo il martello di cui avevo bisogno. Tuttavia, dovrebbero funzionare anche altri trucchi che influenzano il concetto di Eclipse del percorso di classe / stato di compilazione.

Inoltre, penso che questo comportamento sia stato attivato in parte dal tentativo di refactoring di una classe Scala rinominandola (cosa che fa schifo l'IDE di Scala Eclipse), dove tutta la pulizia dopo la modifica iniziale del file è manuale. Non c'erano errori di compilazione, ma non c'erano nemmeno avvertimenti che mi aspettavo, il che significa che qualcosa era sicuramente bloccato nelle informazioni sullo stato di compilazione di Eclipse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.