web-dev-qa-db-fra.com

ClassNotFoundException: junit.framework.TestCase est introuvable par org.Eclipse.xtext.junit_2.4.3.v201309030823

Je suis perplexe par cette erreur:

Java.lang.NoClassDefFoundError: junit/framework/TestCase
    at Java.lang.ClassLoader.defineClass1(Native Method)
    at Java.lang.ClassLoader.defineClass(ClassLoader.Java:792)
    at org.Eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.Java:188)
    at org.Eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.Java:638)
...
    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.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.Java:62)
    at org.Eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.Java:23)
...
Caused by: Java.lang.ClassNotFoundException: junit.framework.TestCase cannot be found by org.Eclipse.xtext.junit_2.4.3.v201309030823
    at org.Eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.Java:501)
    at org.Eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.Java:421)
    at org.Eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.Java:412)
    at org.Eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.Java:107)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:357)
    ... 78 more

L'exception se produit lorsque j'exécute les tests de mon DSL Xtext en tant que tests de plugin (c'est-à-dire lorsqu'une nouvelle plateforme Eclipse est démarrée en interne). Cela se produit avant tout mon code est exécuté.

Quand je regarde les dépendances du plugin, je peux voir que org.junit_4.11.0.v201303080030.jar est sur le chemin de classe et je vois aussi /.../workspace/.metadata/.plugins/org.Eclipse.pde.core/.external_libraries/org.junit_4.11.0.v201303080030/junit.jar

OSGis devrait donc certainement être en mesure de résoudre cette dépendance.

Xtext 2.4.3 fonctionne-t-il avec JUnit 4.11 ou dois-je rétrograder mon installation Eclipse vers JUnit 4.10?

14
Aaron Digulla

Deux points

Premier

Vérifiez votre Project Properties->Java Build Path->Libraries (tab). JUnit devrait être là, bien que cela apparaisse généralement dans la version.

Vérifiez votre projet Run Configurations->JUnit->Classpath (tab). JUnit doit se trouver sous Entrées utilisateur pour votre projet.

Deuxième

Vérifiez que vous disposez des plugins ci-dessous

org.Eclipse.xtext.xbase.junit
org.junit (3.8.2)
org.junit (4.8.2)

[EDIT] Cela m'a mis sur la bonne voie. Pour corriger l'erreur, assurez-vous d'avoir org.junit 3.8 dans plateforme cible !

Explication: L'erreur ci-dessus signifie qu'Eclipse lui-même n'a pas pu démarrer. Il semble que le runner JUnit ait une dépendance sur JUnit 3.8. Il ne sera pas utilisé mais sans lui, toute la plateforme ne pourra pas être initialisée.

Vous pouvez voir si vous avez le même problème en regardant la trace de la pile: contient-elle RemotePluginTestRunner.main?

Pour corriger l'erreur, ajoutez le bundle org.junit 3.8 à votre plate-forme cible.

6
A Paul

Créez une classe avec le code ci-dessous dans votre projet-

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class TestJunitLib {

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void test() {
    fail("Not yet implemented");
}

}

Lors de l'enregistrement si Eclipse affiche des erreurs de compilation. Appuyez sur Ctrl + 1 (correction rapide) et sélectionnez l'une des options ci-dessous:

a) Ajouter la bibliothèque jUnit 4 au chemin de construction b) Corriger la configuration du projet

Si un n'apparaît pas, votre installation Eclipse manque le plugin jUnit 4. Dans ce cas, recherchez sur Google comment installer jUnit dans Eclipse.

3
Aniruddh Joshi

Vous pouvez avoir des problèmes non résolus dans votre fichier pom.xml. Ouvrez la vue des problèmes à résoudre en conséquence. Dans l'idéal, vous pourrez alors exécuter les cas de test avec succès sans rencontrer l'exception classnotfoundexception.

1
Raju Rao

Deux endroits possibles pour vérifier plus de détails:

  1. Décompilez le pot que vous avez mentionné (jar tvf ou javap -classpath et spécifiez le JAR), et vérifiez ses dépendances
  2. Vérifier Eclipse.ini pour certaines variables d'initialisation qui pourraient éventuellement être corrigées.
0
Menachem