java - Tests sans racines




eclipse junit (14)

Je n'ai jamais vu cela - mais pour autant que je puisse dire de skimming Google pendant quelques minutes, il semble que cela pourrait être un bug dans Eclipse plutôt qu'un problème avec votre test. Vous n'avez pas l'annotation @Test sur le test, je suppose? Pouvez-vous faire sauter le test et le recréer, et si oui, obtenez-vous la même erreur?

Lors de l'exécution de tous mes tests dans Eclipse (Eclipse 3.4 'Ganymede'), un test est listé sous "Tests non-enrôlés". J'utilise Junit 3.8 et ce test particulier étend TestCase. Je ne vois aucune différence entre ce test et les autres tests. Je ne me souviens pas d'avoir vu cela se produire dans Eclipse 3.3 (Europa).

Clarification:

Nous n'avons pas encore migré vers JUnit 4.0, donc nous n'utilisons pas d'annotations. J'ai aussi googlé et il semblait que la plupart des gens avaient des problèmes avec JUnit 4, mais je n'ai vu aucune solution. À ce stade, le test passe à la fois localement et dans CruiseControl donc je ne suis pas trop inquiet, mais curieux.

Quand j'ai vu cela pour la première fois, cependant, c'était sur un test qui échouait et qui échouait uniquement lorsqu'il était exécuté avec d'autres tests. Cela m'a conduit dans le trou du lapin à la recherche d'une solution au problème «sans racisme» que je n'ai jamais trouvé. Finalement, j'ai trouvé le coupable dans un autre test qui n'était pas correctement démoli.

Je suis d'accord, cela ressemble à un problème d'Eclipse.


Si votre classe étend TestCase quelque part dans sa hiérarchie, vous devez utiliser le lanceur de test JUnit 3 répertorié dans la liste déroulante sous les configurations d'exécution. L'utilisation du lanceur JUnit 4 (par défaut, je crois) provoque ce phénomène de test non raclé.


Je pourrais résoudre le problème en passant de TestRunner ver 4.0 à 3 dans les configurations d'exécution pour la méthode de test individuelle.


Ne pas étendre junit.framework.TestCase dans votre classe de test avec junit1.4 et cela devrait résoudre le problème


Je recevais aussi le message d'erreur "tests non-root" et il s'en est allé magiquement. Je crois que c'était dû au fait que j'utilisais Eclipse avec un projet Maven. Lorsque j'ai ajouté une nouvelle méthode à ma classe Test et lui ai donné l'annotation @Test, elle a commencé à recevoir le message d'erreur lorsque j'ai essayé d'exécuter cette méthode en utilisant l'option de menu "Exécuter en tant que test Junit"; Cependant, une fois que j'ai lancé un build Maven, le message des tests non-root a disparu et je crois que c'est la solution au problème à l'avenir.

Exécutez une génération maven car elle rafraîchira la classe utilisée par JUnit.


Nous avons résolu le problème en nous assurant que notre projet test était construit. Nous avons rencontré un problème dans le chemin de génération qui ne permettait pas de compiler notre classe de test. Une fois le problème de chemin de génération résolu, le test compilé et la méthode "new" ont pu être exécutés. Nous pouvons donc supposer que les tests "non racinés" signifient également qu'ils n'existent pas dans le binaire compilé.


Pour moi le problème était, qu'une exception était levée dans les méthodes @BeforeClass ou @AfterClass . Cela entraînera également la catégorisation des tests comme non-racolés.


Pour moi, c'était dû au problème de construction du projet. Ma configuration de dépendances maven doit être mise à jour.


J'ai eu cette erreur avec le nom de la méthode de test comme "test"

@Test 
public void test() {
 // ... assertTrue(1 == 1); 
}

J'ai renommé la méthode et cela a fonctionné


Ce sont les deux scénarios que les erreurs Unrooted apparaissent.

  1. Si vous avez manqué l'annotation @Test avant le test.

    @Tester

    void public foo () {}

  2. Si c'est un projet Gwt et quand deux simulacres du même objet sont définies. Disons qu'il y a une classe de classe A et

    @GwtMock privé Aest;

    @GwtMock private A a; Ensuite, cela affichera également une erreur de test sans racine.


Une autre chose que vous pouvez essayer est de mettre à jour votre version de JUnit à au moins 4.12.

J'éprouvais ce problème pendant un moment avec une classe qui en étendait une qui utilisait @RunWith (Parameterized.class).

Après un certain temps, et je suis désolé de ne pas savoir exactement ce que j'ai fait pour provoquer cela, le message 'Tests non approuvés' est parti, mais le test ne s'est toujours pas déroulé correctement. Le constructeur qui aurait dû accepter les arguments de la méthode @Parameters n'a jamais été appelé; l'exécution a sauté directement de @BeforeClass à @AfterClass.

Le correctif de ce problème consistait à mettre à jour JUnit depuis le 4.8.1 qu'il utilisait, jusqu'au dernier (4.12). Alors peut-être que cela pourrait aider quelqu'un d'autre dans le futur.


J'ai eu cette erreur parce que j'ai renommé ma méthode de test et j'ai ensuite essayé d'exécuter le test dans Eclipse en cliquant sur la même configuration d'exécution - en référence à l'ancienne méthode qui n'existait pas.



Un autre scénario qui cause ce problème a été de copier / coller aveuglément une méthode qui nécessite un paramètre . c'est à dire

import org.junit.Test;

public class MyTest {

    @Test
    public void someMethod(String param) {
          // stuff
    }

}

Vous avez quelques solutions simples:

  1. définir la variable dans la méthode d'essai spécifique

  2. l'ajouter en tant que variable d'instance à la classe de test

  3. créer une méthode d'installation et l'annoter avec @Before





ganymede