Est-il possible de créer une suite de tests et d'exécuter uniquement certains tests de plusieurs classes différentes?
Option (1) (préférez cela): Vous pouvez réellement faire en utilisant @Category
pour lequel vous pouvez regarder here
Option (2): Vous pouvez faire cela avec quelques étapes comme expliqué ci-dessous:
Vous devez utiliser le test personnalisé JUnit @Rule
et avec une simple annotation personnalisée (donnée ci-dessous) dans votre test élémentaire. Fondamentalement, la règle évaluera la condition requise avant d'exécuter le test. Si la condition préalable est remplie, la méthode Test sera exécutée, sinon, la méthode Test sera ignorée.
Maintenant, vous avez besoin de toutes les classes de test sur votre @Suite
comme d'habitude.
Le code est donné ci-dessous:
MyTestCondition personnalisés Annotation:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyTestCondition {
public enum Condition {
COND1, COND2
}
Condition condition() default Condition.COND1;
}
classe MyTestRule:
public class MyTestRule implements TestRule {
//Configure CONDITION value from application properties
private static String condition = "COND1"; //or set it to COND2
@Override
public Statement apply(Statement stmt, Description desc) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
MyTestCondition ann = desc.getAnnotation(MyTestCondition.class);
//Check the CONDITION is met before running the test method
if(ann != null && ann.condition().name().equals(condition)) {
stmt.evaluate();
}
}
};
}
}
MyTests Classe:
public class MyTests {
@Rule
public MyTestRule myProjectTestRule = new MyTestRule();
@Test
@MyTestCondition(condition=Condition.COND1)
public void testMethod1() {
//testMethod1 code here
}
@Test
@MyTestCondition(condition=Condition.COND2)
public void testMethod2() {
//this test will NOT get executed as COND1 defined in Rule
//testMethod2 code here
}
}
classe MyTestSuite:
@RunWith(Suite.class)
@Suite.SuiteClasses({MyTests.class
})
public class MyTestSuite {
}