J'ai un code d'installation commun que j'ai pris en compte pour une méthode marquée par @Before
. Cependant, il n'est pas nécessaire que tout ce code s'exécute pour chaque test. Existe-t-il un moyen de le marquer pour que le @Before
la méthode ne s'exécute qu'avant certains tests?
Déplacez simplement les tests qui n'ont pas besoin du code d'installation dans une classe de test distincte. Si vous avez un autre code commun aux tests qui serait utile à conserver, déplacez-le dans une classe d'assistance.
Ou utilisez TestNG . Il vous donne un contrôle plus fin sur les tests.
Entièrement d'accord avec le point de déplacer le code associé vers une classe interne. Voici donc ce que j'ai fait.
Voici le code:
class Testing {
@Test
public void testextmethod1() {
System.out.println("test ext method 1");
}
@Nested
class TestNest{
@BeforeEach
public void init() {
System.out.println("Init");
}
@Test
public void testmethod1() {
System.out.println("This is method 1");
}
@Test
public void testmethod2() {
System.out.println("This is method 2");
}
@Test
public void testmethod3() {
System.out.println("This is method 3");
}
}
@Test
public void testextmethod2() {
System.out.println("test ext method 2");
}
}
Voici la sortie
test ext method 1
test ext method 2
Init
This is method 1
Init
This is method 2
Init
This is method 3
Remarque: je ne sais pas si cela est pris en charge dans Junit4. Je fais ça dans JUnit5
Il est possible de réaliser également via Assume de JUnit. Et puis vous pouvez vérifier le nom de la méthode pour laquelle vous souhaitez traiter @Before
.
public class MyTest {
@Rule
public TestName testName = new TestName();
@Before
public void setUp() {
assumeTrue(testName.getMethodName().equals("myMethodName"));
// setup follows
}
}
Consultez le sujet pour plus d'informations sur @Rule
.
Je ne suis pas sûr de @Before, mais j'ai récemment proposé une stratégie pour que le bloc @After s'exécute de manière sélective. La mise en œuvre a été simple. J'ai des indicateurs définis sur des valeurs par défaut dans le cadre de la classe de test. Ils sont réinitialisés aux valeurs par défaut dans la classe @Before. Dans la classe, j'ai besoin de faire des choses spécifiques à un indicateur, j'ai défini ces indicateurs et dans @Après avoir vérifié les valeurs d'indicateur pour effectuer les tâches respectives.