web-dev-qa-db-fra.com

Eclipse JUnit - Causes possibles de l'affichage de "initializationError" dans la fenêtre Eclipse

Je sais que cette question est assez générale, mais je n'ai trouvé aucune indication sur la raison pour laquelle cette erreur peut apparaître. Quelles sont les causes possibles de voir initalizationError dans la fenêtre Eclipse? Je ne reçois aucune information utile, mais juste une trace de défaillance longue et inutile (non incluse ici). 

J'utilise JUnit 4.11

J'ai écrit le code suivant - juste pour voir si cela fonctionne:

package test;

import static org.junit.Assert.*;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class SimpleTest {

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Test
public void test() {
    assertEquals(15, 15);
}

}

Edit: Sorry Dans la fenêtre Eclipse, on appelle en réalité une "trace d'échec":

Java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing     at
Java.lang.ClassLoader.defineClass1(Native Method)   at
Java.lang.ClassLoader.defineClass(Unknown Source)   at
Java.security.SecureClassLoader.defineClass(Unknown Source)     at
Java.net.URLClassLoader.defineClass(Unknown Source)     at
Java.net.URLClassLoader.access$100(Unknown Source)  at
Java.net.URLClassLoader$1.run(Unknown Source)   at
Java.net.URLClassLoader$1.run(Unknown Source)   at
Java.security.AccessController.doPrivileged(Native Method)  at
Java.net.URLClassLoader.findClass(Unknown Source)   at
Java.lang.ClassLoader.loadClass(Unknown Source)     at
Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)  at
Java.lang.ClassLoader.loadClass(Unknown Source)     at
org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.Java:10)
    at
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
    at 
org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:26)
    at
org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
    at
org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.Java:26)
    at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.Java:33)
    at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.Java:25)
    at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.Java:48)
    at
org.Eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.Java:38)
    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)
Caused by: Java.lang.ClassNotFoundException:
org.hamcrest.SelfDescribing     at Java.net.URLClassLoader$1.run(Unknown
Source)     at Java.net.URLClassLoader$1.run(Unknown Source)    at
Java.security.AccessController.doPrivileged(Native Method)  at
Java.net.URLClassLoader.findClass(Unknown Source)   at
Java.lang.ClassLoader.loadClass(Unknown Source)     at
Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)  at
Java.lang.ClassLoader.loadClass(Unknown Source)     ... 25 more
47
lixonn

Vous avez probablement l'un des deux problèmes suivants:

1) Vous utilisez JUnit 4.11, qui n'inclut pas hamcrest. Ajoutez la bibliothèque hamcrest 1.3 à votre chemin de classe.

2) Vous avez hamcrest 1.3 sur votre chemin de classe, mais vous avez une autre version de Junit ou hamcrest sur votre chemin de classe.

Pour le fond, Junit pre 4.11 incluait une version allégée de hamcrest 1.1. 4.11 a supprimé ces classes.

43
Matthew Farwell

Pour moi, c'était une erreur stupide. J'ai par inadvertance défini le test sur private au lieu de public :

@Test
private void thisTestWasCausingProblems() {
...
}

ça aurait dû être

@Test
public void thisTestIsOK() {
...
}
36
JACH

Essayez juste "Projet> Nettoyer ..." - semble être LA solution à beaucoup de problèmes dans Eclipse!

18
Henrik Schulze

Pour moi, c’était un mot clé static manquant dans l’une des méthodes annotées JUnit, par exemple:

@AfterClass
public static void cleanUp() {
    // ...
}
8
friederbluemle

J'ai reçu cette erreur lorsque la classe a été annotée avec @Ignore et j'ai essayé d'exécuter un test spécifique en cliquant dessus avec le bouton droit de la souris. La suppression de @Ignore a résolu le problème.

5
Luke

J'ai expérimenté exactement la même erreur. Mon problème était que la méthode SetUp que j'avais créée était déclarée statique. 

Si vous utilisez Eclipse, vous pouvez obtenir une bonne description en cliquant au-dessus de l'erreur puis en vérifiant la fenêtre de trace des échecs, juste en dessous ... C'est ainsi que j'ai trouvé le vrai problème!

4
pablo.vix

Assurez-vous également que toutes les méthodes @Before-, @After- et any-JUnit-annotated sont déclarées comme étant public. J'ai eu le mien déclaré comme private qui a causé le problème.

3
Monkey Supersonic

Ce problème se produit également si vous avez une règle privée dans votre classe:

@Rule
private TemporaryFolder folderRule;

Rendez-le public.

2
T3rm1

Pour moi, il s’agissait de commons-logging. Depuis que j'utilisais

@RunWith(SpringJUnit4ClassRunner.class)

Cela a résolu mon problème

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
1
Anand Rockzz

Mon erreur est que j'ai raté l'annotation @Test sur la méthode de test.

1
user55926

Pour moi, cela était dû au "type de retour" de la méthode de test. Il devrait être "vide"

1
Karthik Murugan

Je viens d'avoir le même problème et le même message. J'ai pu le réparer en important dans l'archive hamcrest-all-1.3.jar du chemin de construction Java. J'utilise une version JUnit 4.12.

1
JuanJoRoman

J'ai eu le même problème: une fois c'était un problème de chemin Excel et une autre fois il manquait l'annotation @Test.

1
yogendra

Mon problème était que ma classe parent n'avait pas de méthodes @Test. Je n'y ai utilisé que quelques utilitaires. Quand je l'ai déclaré abstract cela fonctionne. 

1
unrein

Si vous utilisez le langage xtend (ou une autre langue JVM avec inférence de type) et que vous n'avez pas explicitement défini le type de retour, il peut être défini sur un type non vide en raison de la dernière expression, ce qui entraînera l'échec de JUnit.

0
Aykut Kllic

J'ai une autre trace d'échec, mais pour les futurs visiteurs utilisant leur moteur de recherche préféré:

Pour moi, le problème était qu’Eclipse avait décidé d’exécuter une seule méthode dans ma classe de test (je ne pouvais pas comprendre pourquoi, cependant) . Surtout si vous n’avez rien changé dans votre configuration, vérifiez votre configuration d’exécution.

0
Qw3ry

Junit 4.11 ne fonctionne pas avec la structure Spring Test . Ce lien InitializationError lors de l’utilisation de Spring + Junit explique comment déboguer Junit initalizationError dans Eclipse.

0
jeffery.yuan

J'avais le même problème ... J'utilisais l'outil de construction Maven avec la portée de dépendance JUnit comme "test" et ma méthode @Test était dans le module principal.

Pour résoudre, j'ai: 1. Commenté la balise scope de la dépendance JUnit dans le fichier pom.xml 2. Reconstruit le paquet 3. Assurez-vous que la classe Test n'a qu'un seul constructeur

La question peut être double: 1. La dépendance de JUnit est limitée à tester la portée et la méthode @Test est dans la portée principale 2. La classe de test a plus d'un constructeur

0
Tony Puthenveettil

Pour moi, j'ai ajouté par erreur un paramètre à la méthode de test qui a provoqué une erreur d'initialisation.

0
Stanley

J'ai eu le même problème, la solution pour moi est la suivante.

Je n'avais installé que le fichier junit.jar à partir du Web, mais cette bibliothèque était liée au fichier hacrest-core.jar Lorsque j'ai téléchargé le fichier hacrest-core.jar et que je l'ai ajouté à mon projet, tout fonctionne correctement.

0
KostasA

J'avais naïvement ajouté junit-4.12.jar de poi.Apache.org à mon chemin de construction dans Eclipse. Je l'ai supprimé (Projet, Propriétés, Chemin de construction Java, Bibliothèques, junit-4.12.jar, Supprimer) puis, dans ma classe de test, a autorisé Eclipse à "Corriger la configuration du projet" après avoir appuyé sur Ctrl-1. Plus de problèmes! :-)

0
i2B

Pour moi, la solution était que l'une des méthodes devait être annulée, je l'avais en tant que booléen.

0
PaN