Je suis passé à JUnit4.4 depuis JUnit3.8. J'exécute mes tests en utilisant ant, tous mes tests s'exécutent avec succès mais les classes d'utilitaires de test échouent avec l'erreur "Aucune méthode exécutable". Le modèle que j'utilise consiste à inclure toutes les classes avec le nom * Test * sous le dossier de test.
Je comprends que le coureur ne trouve aucune méthode annotée avec l'attribut @Test. Mais ils ne contiennent pas une telle annotation car ces classes ne sont pas des tests. Étonnamment, lors de l'exécution de ces tests dans eclipse, il ne se plaint pas de ces classes.
Dans JUnit3.8, ce n'était pas du tout un problème puisque ces classes d'utilitaires n'étendaient pas TestCase, donc le coureur n'a pas essayé de les exécuter.
Je sais que je peux exclure ces classes spécifiques dans la cible junit dans le script ant. Mais je ne veux pas changer le fichier de construction à chaque nouvelle classe d'utilitaire que j'ajoute. Je peux aussi renommer les classes (mais donner de bons noms aux classes a toujours été mon talent le plus faible :-))
Existe-t-il une solution élégante à ce problème?
Réponses:
En supposant que vous contrôliez le modèle utilisé pour trouver les classes de test, je vous suggère de le changer pour qu'il corresponde
*Test
plutôt que*Test*
. De cette façonTestHelper
ne sera pas égalé, mais leFooTest
sera.la source
Annotez vos classes util avec @Ignore. Cela empêchera JUnit d'essayer de les exécuter en tant que tests.
la source
Mon cas spécifique a le scénario suivant. Nos tests
tous s'étendent
et JUnit essayait d'exécuter BaseTixContainerTest. Le pauvre BaseTixContainerTest essayait juste de configurer le conteneur, de configurer le client, de commander une pizza et de se détendre ... mec.
Comme mentionné précédemment, vous pouvez annoter la classe avec
Mais cela a amené JUnit à signaler ce test comme ignoré (par opposition à complètement ignoré).
Cela m'a énervé.
J'ai donc fait de BaseTixContainerTest un résumé, et maintenant JUnit l'ignore vraiment.
la source
@Ignore
Pour empêcher JUnit d'instancier votre classe de base de test, faites-le simplement
(@Ignore le signale comme ignoré, ce que je réserve pour les tests temporairement ignorés.)
la source
protected abstract class
.la source
Soyez prudent lorsque vous utilisez la complétion de code d'un IDE pour ajouter l'importation pour
@Test
.Cela doit être
import org.junit.Test
et nonimport org.testng.annotations.Test
, par exemple. Si vous faites ce dernier, vous obtiendrez l'erreur "aucune méthode exécutable".la source
org.junit.jupiter.api.Test
place! mais grâce à vous c'est résolu maintenantAnt est maintenant livré avec l'
skipNonTests
attribut qui a été conçu pour faire exactement ce que vous semblez rechercher. Inutile de changer vos classes de base en abstraites ou d'y ajouter des annotations.la source
skipNonTests
attribut n'est disponible que dans ant 1.9+, ce qui est dommage, car il semble incroyablement utile. Cela exclura également les superclasses de test abstraites.Qu'en est-il d'ajouter une méthode de test vide à ces classes?
la source
Dans votre classe de test si écrit import org.junit.jupiter.api.Test; supprimez-le et écrivez import org.junit.Test; Dans ce cas, cela m'a aussi fonctionné.
la source
@BeforeAll
et@AfterAll
ne sont pas exécutés.@BeforeClass
et@AfterClass
, mais pas JUnit5. Référence: junit.org/junit5/docs/current/user-guide/#migrating-from-junit4J'étais également confronté à un problème similaire ("pas de méthodes exécutables ..") sur l'exécution du morceau de code le plus simple (en utilisant @Test, @Before etc.) et je n'ai trouvé la solution nulle part. J'utilisais Junit4 et Eclipse SDK version 4.1.2. J'ai résolu mon problème en utilisant le dernier SDK Eclipse 4.2.2. J'espère que cela aidera les personnes aux prises avec un problème un peu similaire.
la source