58 votes

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

J'essaie d'exécuter 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 là et que toutes les bibliothèques requises soient là aussi.

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

Avez-vous une idée de la façon de résoudre ce problème ?

Merci.

17 votes

Essayez de nettoyer et de construire votre projet.

1 votes

J'ai essayé plusieurs fois, mais j'obtiens toujours la même erreur.

3 votes

Ouvrez la fenêtre Run Configuration dans eclipse, sélectionnez le test unitaire que vous avez exécuté et allez dans l'onglet classpath : ici vous pouvez vérifier ce qui est réellement dans le classpath.

1voto

user823981 Points 102

Une autre façon dont cela peut se produire, et c'est ce qui s'est passé pour moi, est si vous avez une erreur de construction dont Eclipse ne vous parle pas. Si la compilation du test unitaire échoue, il n'y a pas de fichier .class et vous obtiendrez l'exception ClassNotFoundException.

Dans mon cas, il manquait un fichier jar tiers. Lorsque j'ai exécuté le test, j'ai obtenu une fenêtre contextuelle indiquant "Des erreurs existent dans le(s) projet(s) requis". Je travaille sur un énorme projet et je toujours Je reçois ce message parce que certaines des sources ne sont pas disponibles pour Eclipse (longue histoire). De plus, il ne dit pas quelles sont les erreurs. Je clique donc sur "Continue" et j'obtiens l'exception.

Une fois que j'ai réalisé ce qui se passait, il était facile de le corriger en ajoutant le jar manquant au classpath sous Run -> Debug Configurations...

Je ne suis pas sûr de la meilleure façon de détecter ou d'empêcher que cela se produise, si ce n'est d'être conscient de cette possibilité lorsque quelque chose ne va pas et de revoir vos dernières modifications pour voir ce qui a pu se passer.

0voto

Jam Points 24

Êtes-vous sûr que votre classe de test se trouve dans le dossier de construction ? Vous invoquez junit dans une JVM distincte (fork=true), il est donc possible que le dossier de travail change au cours de cette invocation et comme build est relatif, cela peut poser un problème.

Exécutez ant depuis la ligne de commande (pas depuis Eclipse) avec le commutateur -verbose ou -debug pour voir le classpath / répertoire de travail détaillé avec lequel junit est invoqué et postez les résultats ici si vous ne pouvez toujours pas résoudre ce problème.

0voto

javabrett Points 151

Une variation de la réponse de Guy ci-dessus, impliquant des constructeurs supplémentaires. Disons que vous avez un constructeur 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 le build Ant et le build Eclipse ont des emplacements de sortie différents, Eclipse peut ne pas être capable de localiser la classe de test dans le classpath. Dans le cas d'un constructeur Ant, vérifiez également les cibles configurées pour les constructions clean, auto, manual et after-clean, afin de vous assurer que la cible qui construit les tests unitaires est appelée.

0voto

OSryx Points 1034

J'ajoute cette réponse comme ma révision de solution de ce qui précède.

  1. Il suffit de modifier le fichier .project dans le dossier principal du projet. Utilisez un éditeur XML approprié, sinon vous obtiendrez une fatal error d'Eclipse qui déclare que vous ne pouvez pas ouvrir ce projet.
  2. J'ai fait mon projet nature Java en ajoutant ce <nature>org.eclipse.jdt.core.javanature</nature> a <natures></natures> .
  3. J'ai ensuite ajouté ces lignes correctement indentées <buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand> a <buildSpec></buildSpec> .
  4. Run as JUnit ... Succès

0voto

javaPlease42 Points 842

Faites un clic droit sur le projet dans l'Explorateur : Build Path -> Order and Export -> Select JRE System Library [jdk] et cliquez sur le bouton Bottom.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X