私はJunit Test Suite
を設定しています。クラス内のすべてのテストを実行する標準メソッド(たとえば、here)を使用してテストスイートを設定する方法を知っています。JUnitテストスイート - クラス内のすべてのテストではなく、特定のテストのみを含める?
test suite
を作成して、いくつかの異なるクラスから特定のテストを実行することはできますか?
もしそうなら、どのようにすればよいですか?
私はJunit Test Suite
を設定しています。クラス内のすべてのテストを実行する標準メソッド(たとえば、here)を使用してテストスイートを設定する方法を知っています。JUnitテストスイート - クラス内のすべてのテストではなく、特定のテストのみを含める?
test suite
を作成して、いくつかの異なるクラスから特定のテストを実行することはできますか?
もしそうなら、どのようにすればよいですか?
テストスイートを作成し、いくつかの異なるクラス から特定のテストを実行することは可能ですか?
オプション(1)(これを好む):あなたが実際にあなたがhere
オプション(2)見ることができため@Category
使用してこれを行うことができます。説明したようにあなたはいくつかの手順でこれを行うことができますが
あなたのテストケースでは、JUnitカスタムテスト@Rule
と簡単なカスタムアノテーション(下記)を使用する必要があります。基本的に、ルールはテストを実行する前に必要な条件を評価します。事前条件が満たされている場合は、テストメソッドが実行されます。そうでない場合、テストメソッドは無視されます。
今のところ、いつものようにすべてのテストクラスを@Suite
にする必要があります。
コードを以下に示す:
MyTestConditionカスタム注釈:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyTestCondition {
public enum Condition {
COND1, COND2
}
Condition condition() default Condition.COND1;
}
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クラス:
を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
}
}
MyTestSuiteクラス:
@RunWith(Suite.class)
@Suite.SuiteClasses({MyTests.class
})
public class MyTestSuite {
}