Aucun test trouvé avec le lanceur de tests 'JUnit 4'

105

Mon test Java a bien fonctionné avec Eclipse. Mais maintenant, lorsque je relance le test à partir du menu d'exécution, j'obtiens le message suivant:

No tests found with test runner 'JUnit 4'

Dans le .classpathfichier, j'ai tous les jarfichiers, et à la fin j'ai:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

Comment puis-je résoudre cette erreur et relancer les tests?

utilisateur281070
la source
1
Pouvez-vous publier le contenu de votre test (ou au moins la déclaration de classe). Vous avez également écrit "à la fin:" avec rien d'autre.
phtrivier
vérifiez celui-ci .. cela devrait aider stackoverflow.com/questions/22469480/junit-no-tests-found
prasad vsv
Pour junit 5 voir ici
Anand Rockzz

Réponses:

156

cela m'est juste arrivé. La reconstruction ou le redémarrage d'Eclipse n'a pas aidé.

Je l'ai résolu en renommant l'une des méthodes de test pour commencer par "test ..." (style JUnit3), puis tous les tests sont trouvés. Je l'ai renommé à ce qu'il était auparavant, et cela fonctionne toujours.

Allemand
la source
7
J'ai une méthode similaire testQuotesà d'autres méthodes qui ne commencent pas par un test mais j'obtiens toujours une erreur Aucun test trouvé
Rachel
1
J'ai eu le même problème avec une classe qui s'étend junit.framework.TestCase, et mes méthodes devaient commencer par "test". Plutôt que d'étendre TestCase, j'ai ajouté un import:, import static org.junit.Assert.*;et je peux nommer mes méthodes comme je le souhaite. Bizarre ...
MrDrews
6
Sérieusement, même si un test est annoté avec @Test, le nom de la fonction de test doit toujours être préfixé par "test"?
Brian Shotola
4
Vous pouvez également ajouter 2015 et Eclipse Luna à cette liste. En fait, un grand nombre de mes méthodes @Test commencent toujours par le préfixe "test". J'ai supprimé ce préfixe sur un test, enregistré, puis tous les tests ont été trouvés. Ensuite, je l'ai rajouté et tous les tests ont continué à être trouvés. Il semble qu'il s'agisse plus de changer une méthode (fichier?) Pour qu'Eclipse redécouvre tout.
Brian White
2
Android Studio 2.1.1, mai 2016, fonctionne toujours. Je me demande si cette réponse fonctionnera jusqu'à la fin de l'univers.
Blueriver
42

Lorsque nous obtenons ces erreurs, il semble qu'Eclipse soit simplement confus. Redémarrez Eclipse, actualisez le projet, nettoyez-le, laissez Eclipse le reconstruire et réessayez. La plupart du temps, cela fonctionne comme un charme.

JamesG
la source
1
Oui a travaillé pour moi aussi et d'accord avec dlamblin. Bon rappel pour toujours essayer de redémarrer pour tout problème étrange qui ne peut pas être résolu dans les 5 premières minutes de sollicitation.
Thien
3
J'ai eu ce problème et j'ai fermé le fichier source où j'avais défini ma classe de test, double-cliqué sur ce fichier dans le navigateur, et cela a fonctionné. Donc, fermer et rouvrir le fichier a fonctionné, sans redémarrer Eclipse.
metamatt
11
cela me donne vraiment envie de chercher un nouvel IDE. cela a fonctionné pour moi.
Seth M.
1
la fermeture et la réouverture du projet l'ont corrigé pour moi!
Martin Charlesworth
34

Dans le menu contextuel de votre répertoire 'test', choisissez 'Build path' -> 'Use as a source folder'. Eclipse devrait voir vos fichiers unitTests.java en tant que fichiers source. Avertissement 'Aucun test JUnit trouvé' se produit car il n'y a pas de fichiers unitTests.class dans votre répertoire 'build'

Dima
la source
C'est la solution qui fonctionne pour moi. Le redémarrage ne fonctionne pas.
Andree
C'est ce que je cherchais car je dois avoir le dossier "test" pas dans le dossier "src". J'ai fait cela, puis j'ai ouvert / fermé le projet comme suggéré par les autres réponses et maintenant il se compile et s'exécute comme un test JUnit. Merci!
quux00
J'ai fait de même en sélectionnant le projet -> Chemin de construction Java -> Source -> ajouter le dossier de test. Merci beaucoup!
Peter Clause
Si src / test / groovy est déjà sur votre chemin de construction en tant que dossier source, supprimez-le puis ajoutez-le à nouveau. Plus facile que de supprimer et de remplacer @Test dans chaque fichier de test ...
geneSummons
32

Vérifiez si votre classe de test étend "TestCase". si tel est le cas, supprimez cette clause. Votre classe n'a pas besoin de s'étendre à partir de la classe "TestCase". C'est la plupart des cas que j'ai rencontrés.

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

Suivre TestCase devrait être bien.

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine
néphilim
la source
C'est en effet la bonne réponse. Je l'ai testé avec IntelliJ et JUnit 4.1 et ça marche!
Dio Phung
Le problème auquel je suis confronté est que, dans Eclipse, mes tests JUnit fonctionnent correctement, mais lorsque je les exporte vers un JAR, j'obtiens l'erreur ci-dessus. Des idées?
TryToLearn
Est-ce l'inverse de nos jours? L'ajout de "extend TestCase" a résolu le problème pour moi.
Heinzlmaen le
A travaillé pour moi !!! Merci
JRichardsz
27

J'étais confronté au même problème et je l'ai débogué sur de mauvais exemples sur le Web et sur les composants internes de junit. Fondamentalement, ne faites pas étendre votre classe TestCase comme le montrent certains exemples pour Junit 4.x. Utilisez une convention de dénomination Test ou si vous souhaitez avoir une annotation, vous pouvez utiliser @RunWith (JUnit4.class).

Si vous avez besoin d'accéder aux méthodes d'assert, étendez Assert ou utilisez des importations statiques.

Si votre classe étend TestCase, même si vous utilisez Junit 4 Runner, elle sera exécutée en tant que 3. C'est parce que dans le code d'initialisation il y a une détection:

Voir JUnit3Builder et les lignes:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

Cela renvoie true et le test de compatibilité junit4 ne sera pas essayé.

toomasr
la source
2
Cela a résolu le problème pour moi. Si vous regardez les exemples plus anciens d'utilisation de Junit en premier, ils vous égareront.
Alex Kilpatrick le
"Si votre classe étend TestCase, même si vous utilisez Junit 4 Runner, il sera exécuté en tant que 3" - ce n'est pas vrai (du moins pour Groovy et Intellij IDEA). J'utilise JUnit 4.12, et j'ai annoté la classe avec @RunWith(JUnit4)et étendu de "GroovyTestCase". Sans @RunWith(JUnit4)moi, je suis confronté aux mêmes problèmes.
Veaceslav Gaidarji
Le comportement est toujours le même qu'en 2017 (JUnit 4.12).
sharmaap
5

Essayez d'ajouter

@Test au-dessus de la méthode pour le test comme ceci

@Test
public void testParse()
{

}
Mike Choi
la source
5

Encore une autre solution possible que je vais jeter dans le ring: je n'ai pas pu exécuter la classe de test ni à partir de la fenêtre de l'éditeur, ni de l'Explorateur de packages, mais en cliquant avec le bouton droit sur le nom de la classe dans la vue Outline et en sélectionnant Exécuter en tant que JUnit Le test a fonctionné ... Allez comprendre!

Matthew Wise
la source
même, de la vue d'ensemble cela fonctionne, tout le reste ne fonctionne pas - j'ai essayé toutes les solutions publiées dans 3 threads de débordement de pile, rien ne fonctionne
MPSL
Cela fonctionne pour moi aussi, mais est inutile pour tester la couverture d'un projet.
riche le
4

Pas de combinaisons de test dans JUnit4. Utilisez plutôt des annotations ou utilisez les anciennes conventions de nom JUnit3.

Exemple:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
Romain C
la source
4

Cela m'est également arrivé. J'ai essayé de redémarrer Eclipse et j'ai également préfixé mes méthodes de test avec des tests. Aucun des deux n'a fonctionné.

L'étape suivante a fonctionné: Changez toutes vos méthodes de test présentes dans @BeforeClass et @AfterClass en méthodes statiques.

c'est-à-dire si vous avez votre méthode de test au format ci-dessous:

@BeforeClass
public void testBeforeClass(){
}

puis changez-le en:

@BeforeClass
public static void testBeforeClass(){
}

Cela a fonctionné pour moi.

revindran
la source
4

J'ai trouvé la réponse:

J'ai eu cette erreur lorsque j'ai exécuté le test autonome depuis eclipse (faites un clic droit sur la méthode et choisissez de l'exécuter en tant que test junit),

Lorsque j'ai exécuté la classe complète en tant que test junit, le test s'est exécuté correctement avec les paramètres.

Eyal Zamir
la source
3

Quand je fais face à ce problème, je viens de modifier le fichier et de l'enregistrer ... fonctionne comme un charme

Mahesh
la source
1
Salut mon pote et bienvenue sur Stackoverflow! :) Pouvez-vous préciser votre réponse?
Littm
@Mahesh Vous voulez dire actualiser le fichier (sélectionnez-le et appuyez sur F5)
Cassian
Je suis confronté au même problème de scala, c'est à dire que mes tests sont écrits pour JUnit4 mais ils sont en scala. Et la solution, comme le suggère @Mahesh, est de donner un coup de pied au compilateur. Peu importe ce que vous faites lorsque vous modifiez le fichier, il vous suffit de le modifier. Je tape quelque chose qui donne une erreur de syntaxe, enregistre le fichier, puis annule et enregistre à nouveau. Soudain, mes tests fonctionnent. Cela m'arrive fréquemment, c'est-à-dire au moins tous les jours, généralement plusieurs fois par jour.
Erick G.Hagstrom
3

Mon problème était que la déclaration import org.junit.Test;a disparu (ou n'a pas été ajoutée?). Après l'avoir ajouté, j'ai dû supprimer une autre importdéclaration (Eclipse vous indiquera laquelle) et tout a recommencé à fonctionner.

Sergii
la source
3

Très tard, mais ce qui a résolu le problème pour moi, c'est que les noms de mes méthodes de test commençaient tous par des lettres majuscules: "public void Test". Faire le t minuscule a fonctionné.

Josh T
la source
cela fonctionne pour moi ... mais c'est étrangement une solution déroutante
Anchit Mittal
2

J'ai essayé la solution de Germán. Cela a fonctionné pour toutes les méthodes de ma classe mais j'ai beaucoup de classes dans mon projet.

J'ai donc essayé de supprimer du chemin de construction, puis de le rajouter. Cela a parfaitement fonctionné.

J'espère que ça aide.

Footix29
la source
2

Six ans plus tard ... et il y a toujours des problèmes avec Eclipse et parfois ne pas trouver JUnits.

Dans mon Eclipse Mars 2, j'ai découvert qu'il ne reconnaîtrait pas les classes de test extraites de git s'il y avait plus de 9 ou 10 @Testannotations dans le fichier. Je dois commenter tous les tests supplémentaires, exécuter la classe de test, puis les décommenter et relancer la classe. Allez comprendre...

SimonB
la source
Cette réponse ici est utile, je n'avais pas exactement la même situation, mais les noms des méthodes de test étaient assez similaires et eclipse avait du mal à les trouver. Comme testCase01, testCare02 ... J'ai dû commenter d'autres méthodes "testCasexx" pour exécuter testCase01 ou bien il lève une exception. Rendre toutes les méthodes de test PUBLIQUES semble avoir résolu ce problème !!
01000001
1

Peut-être que votre configuration de lancement JUnit était pour une classe de test individuelle, et vous avez en quelque sorte changé cette configuration pour "exécuter tous les tests dans un dossier, un package ou un projet source"

Mais cela pourrait déclencher le message d'erreur "Aucun test trouvé avec le lanceur de test 'JUnit 4'".

Ou vous avez fait une modification dans votre classe de test, en supprimant l' @Testannotation.
Voir cette page wiki .

VonC
la source
@Test est ici, le message est: impossible de trouver la classe principale toto.lolo.testrunner (qui est spécifiée dans la configuration d'exécution)
user281070
@lamisse: alors, une sorte de problème de chemin de classe? ou un problème de syntex: cela devrait être toto.lolo.Testrunneret non toto.lolo.testrunner('T')
VonC
@lamisse: "toto.lolo.Testrunner" est-il le nom réel de votre classe TestRunner? Est-ce quelque chose que vous avez écrit? Le projet / jar le contient-il dans le classpath de votre configuration de lancement?
phtrivier
1

J'ai également rencontré le même problème lors de l'exécution du test JUnit. J'ai résolu cela en mettant l'annotation @Test juste au-dessus de la fonction de test principale.

Rajith
la source
1

Ce qui a résolu mon cas était similaire à la réponse de @ JamesG: j'ai redémarré Eclipse, reconstruit le projet et actualisé; MAIS avant de faire quoi que ce soit, j'ai d'abord fermé le projet (clic droit sur le projet dans l'explorateur de packages -> Fermer le projet), puis je l'ai rouvert. Ensuite, cela a fonctionné.

Une solution de contournement que j'ai trouvée avant de trouver cette solution ultime que je viens de décrire: Copiez la classe de test et exécutez la classe de test en tant que JUnit.

cellepo
la source
1

Vérifiez si le dossier dans lequel se trouvent vos tests est un dossier source. Sinon, faites un clic droit et utilisez comme dossier source.

Todor Kolev
la source
1

Fermer et ouvrir le projet a fonctionné pour moi.

user3022123
la source
1

Il y a une autre chance, vous pourriez avoir changé Junit Test de la version inférieure (par exemple Junit 3) à Junit 4. Est-ce que suivre les étapes ci-dessous: -

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.
Kundan Atre
la source
1

Ajoutez @Testen plus de votre test.
Passez la souris sur l'annotation.
Choisissez 'ajouter la bibliothèque junit 4 au classpath'

Mike
la source
0

Votre projet Eclipse est-il basé sur maven? Si tel est le cas, vous devrez peut-être mettre à jour la version m2eclipse.

Juste une petite note: j'ai un projet dans Eclipse qui est basé sur maven, et généré initialement à l'aide de l'assistant "nouveau projet maven" dans Eclipse. J'utilise JUnit 4.5 pour les tests unitaires et je pourrais très bien exécuter les tests à partir de la ligne de commande en utilisant maven, et des tests individuels d'Eclipse en utilisant run as JUnit test .... Cependant, lorsque j'ai essayé d'exécuter tous les tests dans le projet en invoquant run as JUnit test ... sur le nœud racine du projet, Eclipse s'est plaint " aucun test trouvé avec le test runner junit 4 ". Résolu en mettant à niveau m2eclipse vers la dernière version de développement stable à partir du site de mise à jour m2eclipse (en particulier, j'ai mis à niveau de la version 0.9.8.200905041414 à la version 0.9.9.200907201116 dans Eclipse Galileo).

De là: http://nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

bouillon
la source
Je ne comprends pas, je ne pense pas que cela soit lié à la version eclispe, mon test a fonctionné hier et pas le cas maintenant à cause de la popup de lancement de Junit y a-t-il un moyen de restaurer ma première configuration?
user281070
Lamisse, moi aussi je suis confus. Je vous suggère de mettre à jour votre question pour expliquer quand le test unitaire fonctionne et quand il ne fonctionne pas.
né le
0

Cela m'est arrivé aussi. J'ai trouvé que dans Eclipse, je n'avais pas créé de nouveau fichier Java Class et c'est pourquoi il ne se compilait pas. Essayez de copier votre code dans un fichier de classe java s'il n'y est pas déjà, puis compilez.

Anna
la source
0

J'ai découvert qu'Eclipse semble n'effectuer des tests de style JUnit 3 que si votre classe de test s'étend de TestCase. Si vous supprimez l'héritage, les annotations ont fonctionné pour moi.

Attention, vous devez importer statiquement toutes les assert*méthodes requises comme import static org.junit.Assert.*.

Martin C.
la source
0

Je devais faire un mvn clean en ligne de commande puis project-> clean dans eclipse. J'ai renommé la classe au préalable, puis l'ai renommée, mais je doute que cela ait aidé.

Joe Otheride
la source
0

J'utilise également Eclipse avec Maven (m2e 1.4). Les tests étaient en cours avec Maven, mais pas avec Eclipse ... même après plusieurs applications de Maven>Update project.

Ma solution a été d'ajouter quelques lignes dans le .classpath généré par m2e. Les lignes collent maintenant.

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>
pascal
la source
0

J'ai ce problème de temps en temps. La chose qui résout le problème le plus pour moi est d'exécuter le test JUnit à partir des configurations d'exécution ... en s'assurant que JUnit 4 est défini comme lanceur de test.

En général, je vois ce problème lorsque je tente d'exécuter en tant que ... Junit test à partir du menu contextuel de l'Explorateur de packages. Si vous cliquez avec le bouton droit sur le code du test que vous essayez d'exécuter et au lieu de sélectionner Exécuter en tant que ... Test Junit, sélectionnez Exécuter les configurations ... assurez-vous que le projet, la classe de test et le lanceur de test sont correctement définis, cliquez sur Appliquer, puis exécutez fonctionne tout le temps pour moi.

theINtoy
la source
0

J'ai commencé à travailler avec Selenium et Eclipse dans mon travail et je faisais mon premier test automatisé et j'ai supprimé du code @Before, @Test et @After notes et j'avais ce problème "Aucun test trouvé avec le test runner junit4" .

Ma solution était simplement d'ajouter à nouveau les notes @Before, @Test et @After et avec cela mon script fonctionnait. Il est important de ne pas supprimer cela du code.

Ceci est un test simple qui utilise Google pour rechercher quelque chose:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}
JuanTorre
la source
0

En utilisant ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe), j'avais un problème similaire avec le Right Click Scala Test Class-> Run As -> Scala Junit Testmenu contextuel.

J'ai essayé de modifier la classe (mais pas pour un échec de compilation), de nettoyer, de fermer le projet, de fermer Eclipse. Aucun de ceux-ci n'a fonctionné pour restaurer le menu contextuel des classes qui avaient auparavant bien fonctionné. Les classes de test n'utilisent pas l' @Testannotation et utilisent plutôt l' @RunWith(classOf[JUnitRunner])annotation en haut de la classe en utilisant le code ScalaTest.

Quand j'ai essayé de choisir Scala Junit Test directement dans l'éditeur de lancement de la configuration d'exécution, j'ai reçu la boîte de dialogue de la question. La réponse de Footix29 a été la clé pour moi.

J'ai remarqué que même si j'avais nettoyé mon projet plusieurs fois, mes classes dans le répertoire / bin n'avaient pas été reconstruites depuis un certain temps.

Voici comment j'ai récupéré le menu contextuel et j'ai pu à nouveau exécuter Scala Junit Tests:

  • manuallynettoyé les classes en supprimant /bin/<package dir>*via Explorer
  • Project -> Cleaned le projet avec une reconstruction complète

Je soupçonne qu'une modification de classe en général est capable de nettoyer un état enregistré d'Eclipse et de le remettre en marche. Dans mon cas, toutes les classes ouvrières que j'avais essayées avaient échoué,manual étape propre était juste le marteau dont j'avais besoin. Cependant, d'autres astuces qui affectent le concept d'Eclipse du chemin de classe / état de construction devraient également fonctionner.

De plus, je pense que ce comportement a été déclenché en partie en tentant de refactoriser une classe Scala en la renommant (ce que l'EDI Scala Eclipse aspire), où tout le nettoyage après le changement de fichier initial est manuel. Il n'y avait pas d'erreurs de construction, mais il n'y avait pas non plus d'avertissement que je m'attendais à ce que quelque chose soit définitivement bloqué dans les informations sur l'état de construction d'Eclipse.

n0741337
la source