web-dev-qa-db-fra.com

Classe de test JUNIT dans Eclipse - Java.lang.ClassNotFoundException

J'essaie de lancer mon test Junit (pour vérifier qu'un fichier de propriétés se charge correctement), mais j'obtiens ClassNotFoundException bien que la classe soit présente et que toutes les bibliothèques requises le soient également.

Ici c'est l'erreur que je reçois:

Class not found ConfigurationManagerTest                                                 Java.lang.ClassNotFoundException: ConfigurationManagerTest
    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:306)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Launcher.Java:268)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:251)
    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)
    at org.Eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.Java:197)

des idées pour résoudre le problème ?

Merci.

54
Mouna Cheikhna

ConfigurationManagerTest n'est pas trouvé sur votre chemin de classe. Assurez-vous que le fichier ConfigurationManagerTest.class Est disponible sur votre chemin de classe.

Il pourrait ne pas exister s'il n'a pas été correctement compilé ou s'il est créé dans un répertoire pour lequel vous n'avez pas indiqué que le projet Eclipse devrait se trouver sur le chemin d'accès aux classes.

En supposant que vous ayez placé vos classes de test dans un dossier séparé, assurez-vous qu’il apparaît dans la vue "Explorateur de packages" (plutôt que dans la vue "Navigateur").

Sous les propriétés du projet, "Chemin de construction Java" et l'onglet "Source", vous pouvez également voir si le dossier source est inclus pour la construction, ainsi que l'emplacement où les fichiers .class sont générés.

38
Alan Escreet

Il y a une autre possibilité. J'ai eu le même problème tout à l'heure et aucune des solutions ici n'a aidé. À part retirer et recréer le projet - je ne voulais pas l'essayer. Ce qui a aidé, était de nettoyer le projet deux fois immédiatement l'un après l'autre! Clean + build peut être répété autant de fois que cela n’aidera pas. Seulement clean + clean et après ça va bien. (Eclipse 3.6). Bien sûr, vous devriez désactiver la construction automatique pour cela.

Edit: Cet article a eu son dernier plus le 15.11.2017. Le problème (et la solution) reste donc réel.

22
Gangnus

Un autre problème possible est un générateur manquant (il empêchera la création de votre fichier .class).

Vérifiez que votre fichier .project a les lignes suivantes

<buildSpec>
  <buildCommand>
    <name>org.Eclipse.jdt.core.javabuilder</name>
    <arguments>
    </arguments>
  </buildCommand>
</buildSpec>
<natures>
  <nature>org.Eclipse.jdt.core.javanature</nature>
</natures>
4
Guy

Cela m'est arrivé lorsque je glissais et déposais des classes de test dans différents packages. Je viens de faire ce qui suit

  1. Enregistré la classe dans un éditeur de texte.
  2. Suppression de la classe incriminée dans l'explorateur de projet Eclipse.
  3. Recréé la classe.

Bingo! Je peux maintenant exécuter le test!

3
Robert

vérifier les propriétés-> chemin de construction Java -> bibliothèques. il ne devrait y avoir aucune erreur, dans mon cas il y avait des erreurs dans le maven. une fois que j'ai mis le pot requis dans le dépôt Maven, cela a bien fonctionné

2
vamsi-vegi

J'ai essayé toutes les réponses décrites ici mais aucune n'a fonctionné, mais j'ai trouvé ceci thread où slomek résout le problème de manière très simple. Allez simplement dans projet -> propriétés -> Java. Puis déplacez Junit vers le haut en appuyant sur le haut en bas à droite. Ensuite, tout se compile parfaitement.

2
Simon Bengtsson

J'ai eu ce problème et c'était un peu difficile de comprendre ce qui n'allait pas. Le projet comportait un projet de dépendance avec une erreur, ce qui empêchait la construction d’exécuter. Lorsque je supprime ce problème de dépendance, le projet a été construit comme prévu.

Ps.: Je travaille sur un projet qui comporte de nombreuses erreurs de compilation, car nous portons une application qui a été convertie de Delphi à Java. pour trouver le problème.

2
Daniel Pereira

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

  1. Changer le dossier de sortie pour le test
  2. Créez un générateur personnalisé pour le projet qui exécutera test-compile à partir de Maven.
  3. Déplacer les dépendances Maven plus haut dans la liste Commander et exporter dans le chemin de génération du projet

Il y en avait beaucoup plus, mais celui que j'ai trouvé fonctionner était le suivant: Fermez l'environnement de développement. Supprimez les fichiers jars utilisés par le projet de mon référentiel Maven local. Ouvrez l'IDE. Construisez le projet. 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é!

1
gffny

ce qui a fonctionné pour moi, c’est de supprimer la configuration d’exécution du test. Cliquez ensuite avec le bouton droit sur la classe de test, puis cliquez sur Exécuter en tant que test Junit.

maintenant, il recrée une configuration correcte pour moi.

1
Marten Sytema

Une autre façon que cela peut se dérouler, et que je viens de faire pour moi, est si vous avez une erreur de construction que Eclipse ne vous dit pas. Si la compilation du test unitaire échoue, il n'y a pas de fichier .class et vous obtiendrez la ClassNotFoundException.

Dans mon cas, il y avait un fichier jar tiers manquant. Lorsque j'ai exécuté le test, une fenêtre contextuelle indiquant "Des erreurs existent dans les projets requis" a été affichée. Je travaille avec un projet énorme et je toujours reçois ce message car une partie de la source n’est pas disponible pour Eclipse (longue histoire). En outre, il ne dit pas quelles sont les erreurs. Donc, je clique sur "Continuer" et puis je reçois l'exception.

Une fois que j'ai compris ce qui se passait, il était facile de réparer en ajoutant le fichier jar manquant au classpath sous Exécuter -> Configurations de débogage ...

Je ne suis pas sûr de savoir comment détecter ou empêcher cela au mieux, sauf d’être conscient de cette possibilité en cas de problème et de passer en revue les modifications les plus récentes pour déterminer ce qui aurait pu mal se passer.

1
user823981

J'ajoute cette réponse en tant qu'examen de solution ci-dessus.

  1. Vous éditez simplement le fichier .project dans le dossier principal du projet. Utilisez un éditeur XML approprié, sinon vous obtiendrez un fatal error à partir de statistiques Eclipse, vous ne pouvez pas ouvrir ce projet.
  2. J'ai créé la nature de mon projet Java en ajoutant ceci <nature>org.Eclipse.jdt.core.javanature</nature> à <natures></natures>.
  3. J'ai ensuite ajouté ces lignes correctement mises en retrait <buildCommand><name>org.Eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand> à <buildSpec></buildSpec>.
  4. Run as JUnit ... Succès
0
user813853

J'ai reçu cette erreur parce que j'avais récemment créé un nouvel espace de travail et que mes "JRE installés" n'étaient pas configurés correctement. Assurez-vous que dans Preferences -> Java -> Installed JREs le dossier racine de votre JDK est sélectionné. Le défaut pour moi dans un nouvel espace de travail était un JRE pour une raison quelconque.

0
HoppyKamper

Moi aussi, j'ai fait face à la même exception, aucune des solutions sur Internet ne m'a aidé. mon projet contient plusieurs modules. Mon code Junit réside dans le module Web. Et cela fait référence au code du module client.

Enfin, j'ai essayé: Faites un clic droit sur le projet (module Web) -> chemin de construction -> onglet source -> Lien source -> ajouté l'emplacement des fichiers src (module client)

C'est ça! Cela a fonctionné comme un charme J'espère que ça aide

0
Sneha Latha

Cliquez avec le bouton droit de la souris sur le projet dans l'explorateur: Chemin de construction -> Ordre et exportation -> Sélectionnez la bibliothèque système JRE [jdk], puis cliquez sur le bouton Bas.

0
javaPlease42

Je sais que cela a déjà été répondu il y a longtemps, mais la réponse ne m'a pas résolu le problème, mais j'ai tout supprimé des sources dans les paramètres du chemin de construction et les ai rajoutées.

0
Jakob Hartman
  • En supposant que vous avez essayé tout ce qui est raisonnable (supprimer la cible, rafraîchir, nettoyer, reconstruire, installer par maven ...) et que vous avez réalisé que Eclipse ne se comportait pas de façon raisonnable ...
  • Maintenant: Vérifiez s'il n'y a pas d'erreur suggérant qu'il peut s'agir d'un plugin (n'importe quel plugin) ayant quelque chose à voir avec les tests.

  • Dans mon cas:

    • J'ai enlevé EclEmma.
    • Il a commencé à fonctionner ...

J'ai passé quelques heures à essayer de le deviner!.

0
Witold Kaczurba

Êtes-vous sûr que votre classe de test est dans le dossier de construction? Vous appelez junit dans une machine virtuelle Java distincte (fork = true), il est donc possible que le dossier de travail change au cours de cette invocation et que la construction soit relative, ce qui peut poser un problème.

Exécutez ant à partir de la ligne de commande (pas à partir d'Eclipse) avec l'option -verbose ou -debug pour afficher le chemin de classe détaillé/répertoire de travail en cours invoqué avec et publiez les résultats ici si vous ne pouvez toujours pas résoudre ce problème.

0
Jam

Dans la vue "Explorateur de packages", cliquez avec le bouton droit de la souris sur votre classe de test, puis sur "Chemin d'accès à la construction" >> "Inclure".

0
user4714842

J'ai eu ce problème, dans mon cas, le problème repose sur la compilation, j'utilise maven et les classes de test ne compilent pas.

Je l'ai corrigé en faisant une installation maven (il compile tous les fichiers), vous pouvez également vérifier pour d'autres raisons, qui évitent que les tests ne soient compilés comme si vos "configurations d'exécution" ignoraient les tests pour gagner du temps.

0
David Marciel

Une variante de la réponse de Guy ci-dessus, impliquant de nouveaux constructeurs. Supposons que vous ayez un générateur Ant configuré:

<buildSpec>
    <buildCommand>
        <name>org.Eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.Eclipse.ui.externaltools.ExternalToolBuilder</name>
        <arguments>
            <dictionary>
                <key>LaunchConfigHandle</key>
                <value>&lt;project&gt;/.externalToolBuilders/myprojectantlaunch.launch</value>
            </dictionary>
        </arguments>
    </buildCommand>
</buildSpec>

Si les versions Ant et Eclipse ont des emplacements de sortie différents, Eclipse risque de ne pas pouvoir localiser la classe de test sur le chemin d'accès aux classes. Dans le cas d'un générateur Ant, vérifiez également les cibles configurées pour les versions propre, automatique, manuelle et après nettoyage, afin de vous assurer que la cible qui génère les tests unitaires est appelée.

0
javabrett

Veuillez vous assurer que le dossier de sortie dans Java Build Path Onglet défini comme ci-dessous, qui déterminerait l'emplacement du fichier .class. Ensuite, nettoyez le projet.

enter image description here

0
K. Andy wang

Si vous avez un projet Maven, essayez de lancer:

mvn clean compile

puis dans Eclipse clean & build votre projet.

0
German Attanasio

J'ai eu le problème similaire avec mon Helios Eclipse qui débogage Junits. Mon problème était un peu différent car je pouvais exécuter Junits avec succès, mais quand je 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

Encore une autre variation.
D'une manière ou d'une autre, mes classes de test qui fonctionnaient jadis semblaient suivre un autre endroit; mes modifications ne s'exécutaient pas lorsque j'exécutais les tests.

J'ai trouvé que le dossier de sortie de mes fichiers $ {project_loc} src/test/Java n'était pas ce à quoi je m'attendais. Il avait été défini par inadvertance sur $ {project_loc} target/classes. Je l'ai défini correctement dans les propriétés du projet, Java Chemin de construction, onglet Source.

0
J Slick