2016-11-14 2 views

Répondre

2

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 { 
}