web-dev-qa-db-fra.com

JUnit: comment éviter les "méthodes non exécutables" dans les classes de test utils

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?

111
LiorH

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.

46
Jon Skeet

Annotez vos classes util avec @Ignore. JUnit ne tentera donc pas de les exécuter en tant que tests.

137
JoelPM

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
78
gmoore

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.)

36
froh42
  1. S'il s'agit de votre classe de test de base, par exemple AbstractTest et que tous vos tests l'étendent, définissez cette classe comme abstract
  2. S'il s'agit de la classe Util, supprimez * Test de la classe renommée, il s'agit de MyTestUtil ou Utils etc.
15
Raghu K Nair

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".

8
Sridhar Sarnobat

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.

7
mc1arke

Qu'en est-il de l'ajout d'une méthode de test vide à ces classes?

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
    assertTrue(true); // do nothing;
}
4
akuhn

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.

1
illuminatos

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.

0
Rahul Vig