web-dev-qa-db-fra.com

ClassNotFoundException lors de l'exécution de tests unitaires JUnit dans Eclipse (à l'aide de Maven)

Je viens de mettre à niveau ma suite d'outils SpringSource (STS, une variante IDE d'Eclipse) vers la dernière version (v3.6.1). Ensuite, tous mes tests unitaires JUnit ne peuvent plus être exécutés. Je reçois cette erreur:

Class not found ClassToTest
Java.lang.ClassNotFoundException: ClassToTest
    at Java.net.URLClassLoader$1.run(URLClassLoader.Java:200)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(URLClassLoader.Java:188)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:307)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:268)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:252)

Selon ce blog: ClassNotFoundException lors de l'exécution de tests unitaires JUnit dans Eclipse (avec Maven) , , En raison d'une mauvaise configuration du plugin Maven dans Eclipse. Cependant, dans STS 3.6.2, je ne trouve pas cette option "Inclure les modules" dans le plug-in Maven. Comment puis-je résoudre ce problème et réactiver mes tests unitaires?

17
newguy

OK, il semble que je vais devoir répondre à cette question par moi-même.

La raison principale de ce problème reste le plug-in m2Eclipse eclipse. La nouvelle version de ce plugin ne prend pas en charge les modules imbriqués dans un projet. Si nous avons vraiment besoin de voir plusieurs modules, nous devons supprimer l'ancien module de l'explorateur de packages, créer un jeu de travail et importer à nouveau le projet à l'aide de l'option "importer des projets maven existants". L'assistant d'importation Eclipse ouvre une fenêtre et vous demande quel module importer. Ensuite, nous pouvons sélectionner tous les modules et terminer l’importation. En conséquence, le jeu de travail contient tous les modules de votre projet et traite chaque module en tant que projet séparé, même si dans l’espace de travail, vos modules font toujours partie d’un projet. En faisant cela, il résout tous les problèmes rencontrés dans Eclipse liés au classpath, tels que l'impossibilité de rechercher une classe ou l'impossibilité d'exécuter les tests unitaires et d'obtenir une Java.lang.ClassNotFoundException.

Pour référence, voici un article pour vous apprendre à créer un ensemble de travail: Ensemble de travail

Je pense que vous pouvez importer le projet sans créer de nouveau jeu de travail, mais celui-ci conservera tous les modules appartenant à votre projet dans un jeu, ce qui facilitera son organisation.

J'aurais aimé avoir la réponse il y a deux mois afin de ne pas perdre beaucoup de temps à chercher une solution.

5
newguy

Il y a encore quelques back-draws sur le plugin m2e actuel. Les tests unitaires ne peuvent pas être exécutés en tant que projet inclus regroupés dans un ensemble de travail. Suivre peut aider:

  1. Faites un clic droit sur le projet, y compris les tests Junit.
  2. Sélectionnez Maven -> Désactiver la résolution de l’espace de travail

Essayez ensuite de relancer votre test.

17
Tim Long

Je pense avoir trouvé la solution. Du moins, cela a fonctionné pour moi: Cliquez avec le bouton droit sur le projet et choisissez "Maven" -> "Mettre à jour les dépendances".

Ensuite, lorsque j'ai essayé, je n'ai pas eu ClassNotFoundException.

4
Kumar Manish

J'ai essayé tout ce qui est mentionné ici et dans d'autres posts. Parmi les solutions proposées, citons:

  1. Modifiez le dossier de sortie pour les classes de test.
  2. Créez un générateur personnalisé pour le projet qui exécutera test-compile à partir de Maven.
  3. Déplacez les dépendances Maven plus haut dans la liste Order and Export du chemin de génération du projet.

Il y en avait beaucoup, beaucoup plus, mais celui que j'ai trouvé pour travailler était le suivant: 

  1. Fermez l'environnement de développement. 
  2. Supprimez les fichiers jars utilisés par le projet de mon référentiel Maven local. 
  3. Ouvrez l'IDE. 
  4. Construisez le projet. 
  5. Exécutez le test.

Après des heures à frapper ma tête contre mon clavier et à suivre les solutions suggérées, celle-ci a fonctionné!

2
gffny

Nous avons également fait face à la même exception ClassNotFoundException lors de l’exécution de la classe de test JUnit. Mais lorsque nous avons essayé d’utiliser les étapes suivantes, son exécution a réussi.

  1. Sélectionnez votre projet.
  2. Cliquez sur l'option de projet affichée dans la barre d'outils de l'EDI Eclipse.
  3. Sélectionnez «nettoyer».
  4. Maintenant, essayez d'exécuter le fichier de test.
2
user5259110

En guise de solution de contournement, essayez d'exécuter mvn test-compile (soit dans Eclipse, soit à partir de la ligne de commande), puis essayez d'exécuter le test Junit dans Eclipse.

0
artbristol