Je suis passé de JUnit3.8 à JUnit4.4. J'exécute mes tests avec ant. Tous mes tests s'exécutent correctement, mais les classes utilitaires de test échouent avec l'erreur "Aucune méthode exécutable". Le modèle que j'utilise consiste à inclure toutes les classes portant le nom * Test * dans le dossier 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, cela ne posait aucun problème puisque ces classes d’utilitaires n’étendaient pas TestCase et que le coureur n’avait donc pas essayé de les exécuter.
Je sais que je peux exclure ces classes spécifiques de la cible junit en 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 le bon nom aux classes a toujours été mon talent le plus faible :-))
Existe-t-il une solution élégante à ce problème?
En supposant que vous maîtrisiez le modèle utilisé pour trouver les classes de test, nous vous suggérons de le modifier pour qu'il corresponde à *Test
plutôt que *Test*
. De cette façon, TestHelper
ne sera pas mis en correspondance, mais FooTest
.
Annotez vos classes util avec @Ignore. JUnit ne tentera donc pas de les exécuter en tant que tests.
Mon cas spécifique a le scénario suivant. Nos tests
public class VenueResourceContainerTest extends BaseTixContainerTest
tous s'étendent
BaseTixContainerTest
et JUnit essayait d'exécuter BaseTixContainerTest. Le pauvre BaseTixContainerTest essayait juste d'installer le conteneur, d'installer le client, de commander une pizza et de se détendre… homme.
Comme mentionné précédemment, vous pouvez annoter la classe avec
@Ignore
Mais cela a amené JUnit à signaler que ce test avait été ignoré (par opposition à complètement ignoré).
Tests run: 4, Failures: 0, Errors: 0, Skipped: 1
Ce genre de moi m'a irrité.
J'ai donc résumé BaseTixContainerTest et maintenant JUnit l'ignore vraiment.
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
Pour empêcher JUnit d’instancier votre classe de base de test, il suffit de le
public abstract class MyTestBaseClass { ... whatever... }
(@Ignore le signale comme ignoré, ce que je réserve pour temporairement tests ignorés.)
Soyez prudent lorsque vous utilisez l'achèvement de code d'un environnement de développement intégré (IDE) pour ajouter l'importation pour @Test
.
Cela doit être import org.junit.Test
et pas import org.testng.annotations.Test
, par exemple. Si vous procédez de la sorte, vous obtiendrez l’erreur "pas de méthodes exécutables".
Ant vient maintenant avec l'attribut skipNonTests
qui a été conçu pour faire exactement ce que vous semblez rechercher. Pas besoin de changer vos classes de base pour les résumer ou leur ajouter des annotations.
Qu'en est-il de l'ajout d'une méthode de test vide à ces classes?
public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
assertTrue(true); // do nothing;
}
Dans votre classe de test, si écrit, importez org.junit.jupiter.api.Test; supprimez-le et écrivez import org.junit.Test; Dans ce cas, cela a fonctionné moi aussi.
J'étais également confronté à un problème similaire ("pas de méthodes exécutables ..") lors de l'exécution du plus simple élément de code (Using @Test, @Before, etc.) et n'ai trouvé la solution nulle part. J'utilisais Junit4 et Eclipse SDK version 4.1.2. 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.