web-dev-qa-db-fra.com

Exception de classe introuvable lors de l'exécution du test JUnit

Je reçois cette erreur lors de l'exécution du test JUnit dans 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)

J'ai essayé d'ajouter la bibliothèque JUnit dans le chemin d'accès aux classes bien que j'utilise maven et que la bibliothèque JUnit se trouve dans la dépendance POM. 

J'ai déjà essayé de nettoyer le projet et de créer un nouveau scénario de test JUnit à l'aide du plug-in JUnit pour Eclipse, avec le même problème.

85
xybrek

Cela semble se produire car seul le code source est compilé lorsque vous utilisez mvn clean compile (j'utilise maven 3.1.0, donc je ne suis pas sûr qu'il se soit toujours comporté de la sorte). 

Si vous exécutez mvn test, le code de test sera également compilé, mais il exécutera les tests (ce qui peut ne pas être souhaitable immédiatement si vous essayez de les exécuter via Eclipse.) Pour contourner ce problème, ajoutez test-compile à votre commande Maven séquence chaque fois que vous faites un mvn clean. Par exemple, vous exécuteriez mvn clean compile test-compile.

85
Newtrino

J'ai eu un problème similaire avec mes tests et j'ai trouvé quelque part sur le Web que vous devez accéder à Build Path dans les propriétés de votre projet et déplacer Maven Dependencies above JRE System Library . Cela semble avoir fonctionné pour moi.

87
slomek

J'ai rencontré le même problème et j'ai pu résoudre le problème en utilisant @ - slomek's answer mais le problème a refait surface par la suite. 

Je l'ai finalement résolu en ajoutant le dossier de sortie de mon projet à la configuration d'exécution du test JUnit. Les étapes sont les suivantes:

  • Recherchez le dossier de sortie de votre projet dans Project properties -> Java Build Path -> Default output folder
    • C'est généralement <project-folder>/bin
  • Aller au Run -> Run Configurations...
  • Cliquez sur la configuration d'exécution du test unitaire, puis sur l'onglet Classpath.
  • Ajoutez explicitement le dossier de sortie de votre projet sous User Entries - même si le projet y est déjà inclus
    • Cliquez sur Advanced -> Add folder pour ajouter le dossier de sortie

Ce problème peut être dû à une configuration de projet étrange dans Eclipse - par exemple dossier source avec les projets maven imbriqués importés sous la forme d'un projet/dossier unique (du moins c'est ainsi que mon projet a été configuré).

17
nhylated

Si ce problème se produit uniquement dans Eclipse, l'exécution de la commande Projet -> Nettoyer ... sur le projet sélectionné peut aider.

12
johanwannheden

Après avoir tout essayé ici sans amélioration, j'ai résolu mon problème en redémarrant simplement Eclipse

10
Berit Larsen

Dans mon cas, j'avais une mauvaise structure de répertoires maven.

Ce qui devrait être comme:

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

Après avoir corrigé cela - tout a fonctionné comme un charme.

3
ITisha

Dans mon cas, seules les étapes suivantes m'ont aidé à résoudre ce problème:

  1. Projet-> Propriétés-> Paramètres Exécuter/Déboguer. 
  2. Dans "Lancer les configurations pour '.....'", sélectionnez classes/projets 
  3. Edition -> Classpath -> "Restaurer les entrées par défaut"
1
Roman Romaniuk

J'ai eu le même problème avec un projet Gradle avec un SourceSet test avec deux répertoires de ressources. 

Cet extrait provient d'un main-module.gradle et ajoute un répertoire de ressources au test SourceSet:

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

En faisant cela, j'avais deux répertoires de ressources liés au test SourceSet du module principal du projet:

../other-module/src/test/resourcessrc/test/resources (par rapport au dossier du module principal, ajouté automatiquement par le plugin Java)

Je découvre que si deux fichiers portant le même nom se trouvaient dans les deux répertoires sources, quelque chose se passait mal à l'étape des ressources de processus. En conséquence, aucune compilation n'a été lancée et, pour cette raison, aucune classe .class n'a été copiée dans le répertoire bin où JUnit recherchait les classes. La ClassNotFoundException a disparu juste en renommant l'un des deux fichiers.

1
David Obber

Plus tôt, dans ce cas, j’avais toujours mvn Eclipse:eclipse et redémarré mon Eclipse et cela fonctionnait. Après avoir migré vers GIT, cela a cessé de fonctionner pour moi, ce qui est un peu bizarre.

Le problème fondamental est que M. Eclipse ne trouve pas la classe compilée. Ensuite, j'ai défini le dossier de sortie en tant que Project/target/test-classes qui est généré par défaut par mvn clean install sans ignorer le test et a procédé à la solution suivante:

Option 1: Définir le chemin de classe pour chaque cas de test

Eclipse -> Exécuter -> Exécuter les configurations -> sous JUnit-> sélectionner mytest -> sous onglet Classpath-> Sélectionner les entrées d'utilisateur-> Avancé-> Ajouter un dossier -> Sélectionner -> Appliquer-> Exécuter

Option 2: Créer une variable classpath et l'inclure dans classpath pour tous les cas de test

Eclipse -> Windows -> Variables Classpath -> Nouveau -> [Nom: Junit_test_cases_cp | chemin:] -> ok Ensuite, allez dans Eclipse-> Exécuter -> Exécuter les configurations -> JUnit-> sélectionner mytest -> sous l'onglet classpath -> sélectionner les entrées utilisateur-> Avancé-> ajouter des variables classpath-> Sélectionnez Junit_test_cases_cp-> ok-> Apply-> Run

C'est la seule chose qui fonctionne actuellement pour moi après avoir essayé toutes les suggestions en ligne.

1
user3222211

J'avais affronté le même problème. J'ai résolu le problème en supprimant la dépendance externe Junit Jar que j'avais ajoutée en téléchargement depuis Internet à l'extérieur. Mais ensuite je suis allé à projet-> propriétés-> chemin de construction-> ajouter une bibliothèque-> junit-> choisi la version (ex junit4) -> appliquer.

Il a automatiquement ajouté la dépendance. cela a résolu mon problème.

0
Agniva Dutta

Il convient également de mentionner que si vous utilisez eGit et que votre chemin de classe est mis à jour à cause, par exemple, d'un outil de couverture de test comme Clover, il existe parfois un problème de nettoyage qui ne supprime pas complètement le contenu de /path/to/git/repository/<project name>/bin/

Pour résumer, j’ai utilisé la vue Journal des erreurs d’Eclipse, identifié la cause des problèmes au cours de cet effort de nettoyage, navigué dans le répertoire source et supprimé manuellement le répertoire <project name>/bin. Une fois cela terminé, je suis retourné sur Eclipse et j'ai rafraîchi (F5) mon projet et l'erreur est partie.

0
Blake Neal

Effectuer des modifications factices et enregistrer la classe de test peut résoudre le problème. Il construira le .class automatiquement

0
Lorenzo Lerate

1- MVN Eclipse: Eclipse

2- projet nettoyer tous les projets

3- redémarrer

0
Toumi

J'ai eu le même problème avec mon Helios Eclipse qui débogage des Junits. Mon problème était un peu différent, car je pouvais exécuter Junits avec succès, mais lorsque j'obtenais ClassNotFoundException lors du débogage des mêmes JUNIT.

J'ai essayé toutes sortes de solutions différentes disponibles sur Stackoverflow.com et sur des forums ailleurs, mais rien ne semble fonctionner. Après avoir frappé ma tête avec ce problème pendant près de deux jours, j'ai finalement trouvé la solution.

Si aucune des solutions ne semble fonctionner, supprimez simplement le dossier .metadata créé dans votre espace de travail. Cela créerait une surcharge supplémentaire liée à l'importation des projets et à toutes sortes de configurations que vous avez effectuées, mais cela résoudra sûrement le problème.

J'espère que cela aide.

0
Nayan

Ces étapes ont fonctionné pour moi.

  • Supprimez le contenu du référentiel Maven local.
  • lancez mvn clean install dans la ligne de commande. (cd dans le répertoire pom).
  • Construire le projet dans Eclipse.
0

NoClassDefFoundError signifie vraiment qu'il ne peut pas initier la classe. Il n'a rien à voir avec la recherche de la classe. J'ai eu cette erreur en appelant trim () sur une chaîne nulle.

JUnit ne montrera pas NullPointerException. La chaîne n'est pas nulle lors de l'exécution normale, car Je vais chercher la chaîne dans un fichier de propriétés qui n'est pas disponible pour les tests. 

Mon conseil est de retirer des morceaux de la classe jusqu'à ce que vos tests commencent à passer. Ensuite, vous pouvez déterminer quelle ligne donne l'erreur.

Plus d'infos ici: https://stackoverflow.com/a/6352584/1308453https://stackoverflow.com/a/6352584/1308453

0
Philip Rego

Il semble compiler le problème. Exécuter le projet en tant que test Maven, puis Exécuter en tant que JUnit Test.

0
Yao Li

Vérifiez si votre projet est ouvert en tant que projet Maven et pas simplement en tant que projet Java classique. En fait, c'est une évidence, mais c'est exactement la même raison pour laquelle vous pourriez le manquer.

0
Ben

Cela peut aussi être dû à "[ERREUR] Aucun compilateur n'est fourni dans cet environnement. Peut-être que vous utilisez un JRE plutôt qu'un JDK?"

0
William