Eccezione classe non trovata durante l'esecuzione del test JUnit


117

Ricevo questo errore durante l'esecuzione del test JUnit in Eclipse:

Class not found com.myproject.server.MyTest
java.lang.ClassNotFoundException: com.myproject.server.MyTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
    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)

Ho provato ad aggiungere la JUnitlibreria nel classpath anche se sto usando Maven e la libreria JUnit è nella dipendenza POM.

Ho già provato a pulire il progetto e ho creato un nuovo test case JUnit utilizzando il plug-in JUnit per Eclipse, ottenendo ancora lo stesso errore.


10
prova a eseguire mvn clean testuna volta che compilerà tutte le classi di test
Jigar Joshi

1
Puoi controllare se com.myproject.server.MyTest è presente nella cartella bin? Voglio dire, se non viene compilato a causa di un errore del percorso di compilazione o build, riceverai questo errore.
vikas

stai testando una classe o l'intero progetto?
Doszi89


1
Nel mio caso l'esecuzione di test utilizzando Maven ha funzionato, ma se faccio clic con il pulsante destro del mouse su una classe di test e scelgo Esegui come -> Test JUnit, viene segnalata ClassNotFoundException. L'ho risolto facendo clic con il pulsante destro del mouse sul progetto e andando su Proprietà -> Costruttori e quindi spostando Maven Project Builder sopra Java Builder
xorcus

Risposte:


121

Ciò sembra accadere perché solo il codice sorgente viene compilato quando si utilizza mvn clean compile(sto usando Maven 3.1.0 quindi non sono sicuro che si sia sempre comportato in questo modo).

Se esegui mvn test, anche il codice di test verrà compilato, ma poi esegue i test (che potrebbe non essere immediatamente desiderabile se stai cercando di eseguirli tramite Eclipse.) Il modo per aggirare questo è aggiungere test-compilealla sequenza di comandi Maven ogni volta fai un mvn clean. Ad esempio, corri mvn clean compile test-compile.


1
L'ho fatto una volta e la risposta di Slomek ha funzionato e poi lo stesso errore si è verificato di nuovo, quindi ho dovuto provare anche questo. Funziona di nuovo bene ora, quindi per essere sicuro potresti voler fare entrambe le cose.
Roger,

Grazie, ha funzionato per me. Ma nel mio caso, non ha funzionato fino a quando non è stato riaperto il progetto in Eclipse.
Paramesh Korrakuti

In parole semplici, fai un 'mvn clean test-compile' e poi esegui i tuoi test Junit in eclipse. Ha funzionato per me. Grazie.
Sreram

103

Ho avuto un problema simile con i miei test e ho scoperto da qualche parte nel Web che devi andare su Build Path nelle proprietà del tuo progetto e spostare le dipendenze Maven sopra la libreria di sistema JRE . Sembra che abbia funzionato per me.


1
Grazie, questo ha risolto il mio problema. Il test effettivo stava ottenendo l'errore di classe non trovata quando ho provato a eseguirlo. Penso che questo sia probabilmente un primo passo preferibile prima di aggiungere ulteriori obiettivi di compilazione mvn.
Roger

8
Questo metodo è descritto con gli screenshot in questo post (nel caso in cui i passaggi non siano chiari dalla risposta di @ slomek sopra)
nhylated

2
Non potevo spostare Maven Managed Dependencies sopra JRE System Library in Eclipse Mars 2, ma potevo fare clic con il pulsante destro del mouse sul progetto e andare su Proprietà -> Builders e quindi spostare Maven Project Builder sopra Java Builder e ha funzionato per me.
xorcus

Ho provato tutto quanto sopra e non ha funzionato, inoltre non potevo spostare le dipendenze Maven sulla libreria di sistema JRE ma era nella scheda Librerie. Quindi sono andato a Build Path -> Order & Export -> poiché è stato possibile spostare le dipendenze di Maven sopra la libreria di sistema JRE. Quindi ho creato il progetto ed eseguito un'installazione di Maven, quindi il test è stato eseguito correttamente.
Megan

22

Ho affrontato lo stesso problema e sono stato in grado di risolverlo usando la risposta di @ slomek, ma il problema è riemerso dopo.

Alla fine l'ho risolto aggiungendo la cartella di output del mio progetto alla configurazione di esecuzione del test JUnit. I passaggi sono:

  • Trova la cartella di output del tuo progetto da Project properties -> Java Build Path -> Default output folder
    • Di solito questo è <project-folder>/bin
  • Vai a Run -> Run Configurations...
  • Fare clic sulla configurazione di esecuzione dello unit test e fare clic sulla Classpathscheda
  • Aggiungi esplicitamente la cartella di output del tuo progetto sotto User Entries, anche se il progetto è già incluso lì
    • Fare clic su Advanced -> Add folderper aggiungere la cartella di output

Questo problema potrebbe essere dovuto a una strana configurazione del progetto in Eclipse, ad es. Cartella di origine con progetti Maven annidati importati come un singolo progetto / cartella (almeno era così che era stato configurato il mio progetto).


Grazie mille; Ho avuto questo problema. La tua correzione ha funzionato per me; i primi due no. Up-votato.
davtom

Assolutamente brillante! Mi sto grattando la testa per anni per questo. Grazie!
RayCh

17

Se questo problema si verifica solo in Eclipse, l'esecuzione del comando Project -> Clean ... sul progetto selezionato può aiutare.


Grazie - in realtà ha funzionato per me - JAVE EE eclipse gradlew
Abdeali Chandanwala

11

Dopo aver provato tutto qui senza alcun miglioramento, ho risolto il mio problema riavviando Eclipse


5

Ho risolto il mio problema eseguendo l'aggiornamento di Maven. Fai clic con il pulsante destro del mouse su progetto il tuo progetto> Maven> Aggiorna progetto


3

Nel mio caso avevo una struttura di directory Maven sbagliata.

Quale dovrebbe essere come:

/ src / test / java / com.myproject.server.MyTest

Dopo averlo risolto, tutto ha funzionato a meraviglia.


2

Nel mio caso, solo i passaggi successivi mi hanno aiutato a risolvere questo problema:

  1. Progetto-> proprietà-> Impostazioni di esecuzione / debug.
  2. In "Avvia configurazioni per '.....'" seleziona classi / progetti
  3. Modifica -> Classpath -> "Ripristina voci predefinite"

Grazie!! Solo questo mi ha aiutato !!
Sumandas

1

In precedenza, in questo caso, ho sempre fatto mvn eclipse:eclipsee riavviato il mio Eclipse e ha funzionato. Dopo la migrazione a GIT, ha smesso di funzionare per me, il che è un po 'strano.

Il problema di base qui è che Mr Eclipse non trova la classe compilata. Quindi, ho impostato la cartella di output come Project / target / test-classes che viene generata per impostazione predefinita mvn clean installsenza saltare il test e ho proceduto con la seguente soluzione alternativa:

Opzione 1: impostare il classpath per ogni test case

Eclipse -> Esegui -> Esegui configurazioni -> in JUnit-> seleziona mytest -> nella scheda classpath-> Seleziona voci utente-> Avanzate-> Aggiungi cartella -> Seleziona -> Applica-> Esegui

Opzione 2: creare una variabile classpath e includerla in classpath per tutti i casi di test

Eclipse -> Windows -> Variabili classpath -> Nuovo -> [Nome: Junit_test_cases_cp | percorso:] -> ok Quindi vai su Eclipse-> Esegui -> Esegui configurazioni -> JUnit-> seleziona mytest -> nella scheda classpath -> Seleziona voci utente-> Avanzate-> Aggiungi variabili classpath-> Seleziona Junit_test_cases_cp-> ok- > Apply-> Esegui

Questa è l'unica cosa che attualmente funziona per me dopo aver provato tutti i suggerimenti online.


1

Ho avuto lo stesso problema con un progetto Gradle con un SourceSet di prova con due directory di risorse.

Questo frammento proviene da un main-module.gradle e aggiunge una directory di risorse al SourceSet di test:

sourceSets {
    test {
        resources {
            srcDir('../other-module/src/test/resources')
        }
    }
}

In questo modo ho avuto due directory di risorse relative al SourceSet di test del modulo principale del progetto:

../other-module/src/test/resources src / test / resources (relativo alla cartella del modulo principale, aggiunta automaticamente dal plugin java)

Ho scoperto che se avevo due file con lo stesso nome in entrambe le directory dei sorgenti, qualcosa nella fase delle risorse di processo è andato storto. Di conseguenza, nessuna compilazione è iniziata e per questo motivo non è stata copiata nessuna .class nella directory bin, dove JUnit stava cercando le classi. L'eccezione ClassNotFoundException è scomparsa semplicemente rinominando uno dei due file.


1

NoClassDefFoundError significa davvero che non può inizializzare la classe. Non ha niente a che fare con la ricerca della classe. Ho ricevuto questo errore quando ho chiamato trim () su una stringa nulla.

JUnit non mostrerà NullPointerException. La stringa non è nulla quando viene eseguita normalmente perché sto recuperando la stringa da un file delle proprietà che non è disponibile per i test.

Il mio consiglio è di rimuovere i pezzi dalla classe finché i tuoi test non iniziano a passare. Quindi puoi determinare quale linea sta dando l'errore.


0

Ho avuto il problema simile con il mio Eclipse Helios che esegue il debug di Junits. Il mio problema era leggermente diverso poiché ero in grado di eseguire Junits con successo ma quando stavo ottenendo ClassNotFoundException durante il debug degli stessi JUNIT.

Ho provato tutti i tipi di soluzioni diverse disponibili su Stackoverflow.com e forum altrove, ma niente sembra funzionare. Dopo aver sbattuto la testa con questi problemi per quasi due giorni, finalmente ho trovato la soluzione.

Se nessuna delle soluzioni sembra funzionare, elimina la cartella .metadata creata nell'area di lavoro. Ciò creerebbe un sovraccarico aggiuntivo per l'importazione dei progetti e di tutti i tipi di configurazione che hai fatto, ma questi risolveranno sicuramente questi problemi.

Spero che questi aiuti.


Come nota ... per fare questo sarà necessario ricostruire il tuo ambiente. Quindi, anche se può risolvere, sii consapevole di ciò che stai per fare ...
Bob

0

Questi passaggi hanno funzionato per me.

  • Elimina il contenuto del repository Maven locale.
  • esegui mvn clean install nella riga di comando. (cd nella directory pom).
  • Crea progetto in Eclipse.

0

1- mvn eclipse: eclipse

2- progetto pulire tutti i progetti

3- riavviare


0

Vale la pena menzionare come un'altra risposta che se stai usando eGit e il tuo classpath viene aggiornato a causa, ad esempio, di uno strumento di copertura del test come Clover, che a volte c'è un singhiozzo di pulizia che non elimina completamente il contenuto di /path/to/git/repository/<project name>/bin/

In sostanza, ho utilizzato la visualizzazione del registro degli errori di Eclipse, ho identificato la causa dei problemi durante questo sforzo di pulizia, sono passato alla directory di origine e ho eliminato manualmente la <project name>/bindirectory. Una volta terminato, sono tornato a Eclipse e ho aggiornato ( F5) il mio progetto e l'errore è scomparso.


0

Controlla se il tuo progetto è aperto come progetto Maven e non solo come un normale progetto Java. In realtà un gioco da ragazzi, ma è esattamente lo stesso motivo per cui potresti perderlo.


0

Può anche essere dovuto a "[ERRORE] Nessun compilatore fornito in questo ambiente. Forse stai utilizzando un JRE piuttosto che un JDK?"


0

Avevo affrontato lo stesso problema. L'ho risolto rimuovendo la dipendenza del jar JUnit esterna che ho aggiunto esternamente tramite download da Internet. Ma poi sono andato a progetto-> proprietà-> percorso build-> aggiungi libreria-> junit-> ho scelto la versione (ex junit4) -> applica.

Aggiungeva automaticamente la dipendenza. ha risolto il mio problema.


0

Apportare qualche modifica fittizia e salvare la classe di test può risolvere il problema. Costruirà automaticamente il .class


0

Sembra problema di compilazione. Esegui il progetto come test Maven, quindi Esegui come test JUnit.



0

Pls controlla se hai aggiunto junit4 come dipendenza.

per esempio

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

-5

Potresti aver dimenticato di inserire la classe Main e la classe Test Case in / src / test / java. Controllalo una volta.


1
java.lang.ClassNotFoundException si verifica quando la classe è già compilata ma in fase di esecuzione a causa di classpath non impostato correttamente.
Nitin Mahesh
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.