java.lang.Exception: Pas d'exécutable méthodes exception dans l'exécution de JUnits
Je suis en train de lancer la JUnit sur mon invite de commande Linux /opt/junit/
contient le nécessaire en pots(POTS de hamcrest-core-1.3.jar et junit.jar) et les fichiers de classe et je suis en utilisant la commande suivante pour exécuter la JUnit:
java -cp hamcrest-core-1.3.jar:junit.jar:. org.junit.runner.JUnitCore TestRunner
TestJunit classe:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
@Test
public void testAdd() {
String str= "Junit is working fine";
assertEquals("Junit is working fine",str);
}
}
Lanceur:
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println("fail ho gaya"+failure.toString());
}
System.out.println("passed:"+result.wasSuccessful());
}
}
Je suis l'exception suivante sur l'exécution de cette
JUnit version 4.11
.E
Time: 0.003
There was 1 failure:
1) initializationError(TestRunner)
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:169)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:104)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
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.runner.Computer.getRunner(Computer.java:40)
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
at org.junit.runners.Suite.<init>(Suite.java:80)
at org.junit.runner.Computer.getSuite(Computer.java:28)
at org.junit.runner.Request.classes(Request.java:75)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
FAILURES!!!
Tests run: 1, Failures: 1
- je ne sais pas, traversait débutant tutoriels. ces fichiers ont été copiés à partir du tutoriel lui-même. De toute façon eu ma réponse, sqa.fyicenter.com/FAQ/JUnit/...
- double possible de java.lang.exception pas praticable méthodes junit
- Aucune réponse travaillé. S'avère que j'avais une ligne de double croisillons d'initialisation dans un de mes tests unitaires...sur JDK 8 pas moins...que, une fois supprimée, la cause de cette erreur de s'en aller! C'était quelque chose comme myObject.setSomething(nouveau OtherObject() {{/*Mis littéralement à rien ici*/}}); Il a fallu des heures pour trouver cette (arrêtais pas de penser à mon importations ont apportant une mauvaise initialiseur statique à partir d'une autre classe, le mauvais chargeur de classe, de réflexion, de déchets, etc). Je crois que ce pourrait être une JVM bug, mais n'ont aucune preuve, donc je vais la laisser cela comme un commentaire au lieu d'une réponse. TL;DR "Supprimer les {{}} une partie de double croisillon init.
Vous devez vous connecter pour publier un commentaire.
Vous obtiendrez cette exception, si vous utilisez le JUnit 4.4 core coureur pour exécuter une classe qui n'a pas de
"@Test" method
.Veuillez consulter le lien pour plus d'info.
courtoisie vipin8169
Cette solution s'applique à un très faible pourcentage de personnes, généralement les gens à mettre en œuvre leur propre test JUnit coureurs et en utilisant un chargeur de classe.
Cela peut se produire lorsque vous chargez une classe à partir d'un autre chargeur de classe, puis essayez d'exécuter le test à partir d'une instance de JUnitCore chargé de la système chargeur de classe. Exemple:
En regardant la trace de la pile:
Le problème se produit effectivement au BlockJUnit4ClassRunner:169 (en supposant que JUnit 4.11):
https://github.com/junit-team/junit/blob/r4.11/src/main/java/org/junit/runners/BlockJUnit4ClassRunner.java#L95
Où il vérifie que les méthodes annotées avec
@Test
:Dans ce cas,
Test.class
aura été chargé avec le système chargeur de classe (c'est à dire celui qui a chargé JUnitCore), donc techniquement aucune de vos méthodes d'essai auront été annotés avec cette annotation.Solution est de charger JUnitCore dans le même chargeur de classe que les tests eux-mêmes.
Modifier: En réponse à la question de user3486675, vous devez créer un chargeur de classe qui n'a pas de délégué pour le système de chargeur de classe, par exemple:
Passer cela, un ensemble d'Url qui comprend tout ce dont vous avez besoin. Vous pouvez créer ce par filtrage le système classpath. Notez que vous ne pouvez pas simplement déléguer le chargeur de classe parent, parce que ces classes seraient ensuite chargés par que, plutôt que le chargeur de classe de vos classes de test.
Alors vous avez besoin pour le coup d'envoi de l'ensemble de la JUnit travail à partir d'une classe chargée par ce chargeur de classe. Il obtient en désordre ici. Quelque chose comme ceci totale de la saleté ci-dessous:
ENSUITE, vous devez invoquer le coureur via la réflexion:
Dans mon cas, j'ai eu mal package importé:
au lieu de
Méfiez-vous de votre ide de saisie semi-automatique.
import org.junit.jupiter.api.Test;
à la place.Mon test du contrôleur en gros raccourci:
J'ai juste enlevé le "public" et comme par magie ça a fonctionné.
J'ai eu cette erreur parce que je n'ai pas créer mon propre suite de tests correctement:
Voici comment je l'ai fait correctement:
Mettre cela en
Foobar.java
:Mettre cela en
FoobarTest.java
:Télécharger
junit4-4.8.2.jar
j'ai utilisé l'un de ici:Le compiler:
De l'exécuter:
Un test réussi.
Dans Eclipse, j'ai eu à utiliser
New > Other > JUnit > Junit Test
. Une classe Java créé avec exactement le même texte m'a donné l'erreur, peut-être parce qu'il a été en utilisant JUnit 3.x.La solution la plus simple est d'ajouter @Test de la méthode annotée de classe où l'initialisation de l'exception est présent.
Dans notre projet, nous avons la classe principale avec les paramètres initiaux. J'ai ajouté @la méthode d'Essai et d'exception a disparu.