私のテストクラスのすべてのテストは、各テストの実行前に 'before'メソッド(JUnitので注釈付き)を実行します。JUnitの 'before'メソッドから個々のテストを除外します
メソッドの前にこれを実行しないようにする特別なテストが必要です。
これを行う方法はありますか?
私のテストクラスのすべてのテストは、各テストの実行前に 'before'メソッド(JUnitので注釈付き)を実行します。JUnitの 'before'メソッドから個々のテストを除外します
メソッドの前にこれを実行しないようにする特別なテストが必要です。
これを行う方法はありますか?
残念ながら、このロジックをコーディングする必要があります。 JUnitにはこのような機能はありません。実行中「の前に」必要とテストが含まれている1及び第二のそれはこれを必要としないテストが含まれています
@RequiresBefore
を作成し、このアノテーションでこれを必要とするテストをマークします。テストランナーは注釈を解析し、「前」メソッドを実行するかどうかを決定します。第2の解決策はより明確である。最初の方が簡単です。これは、あなたが選んだものの1つです。
@Enclosed
ランナーを使用して2つの内部テストクラスを持つことを検討してください。 1つは必要な@Before
メソッドで、もう1つはありません。
@RunWith(Enclosed.class)
public class Outter{
public static class Inner1{
@Before public void setup(){}
@Test public void test1(){}
}
public static class Inner2{
// include or not the setup
@Before public void setup2(){}
@Test public void test2(){}
}
}
あなたはTestRuleでこれを行うことができます。
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
if (description.getAnnotation(DontRunBefore.class) == null) {
// run the before method here
}
base.evaluate();
}
};
}
テストケース内で@Before
の設定を元に戻すことでも解決できます。 これは、ここでソリューションの長所と短所があるでしょう、それが見えるかもしれどのよう
@Before
public void setup() {
TestDataSetupClass.setupTestData();
}
@Test
public void testServiceWithIgnoreCommonSetup() {
TestDataSetupClass.unSet();
//Perform Test
}
です。これは、不必要な設定と解除のサイクルです。しかし、何百ものテストケースのためだけにそれを行う必要があり、自己AOPを書くことや複数の内部テストクラスを維持するオーバーヘッドを避けなければならない場合はうまくいく。
更新されたリンクは次のとおりです。https://github.com/junit-team/junit/wiki/Rules参照:http://junit.org/apidocs/org/junit/rules/TestRule.html – Bowen
TestRule内から@Before文を簡単に実行する方法はありますか?私は '//ここでメソッドを実行する 'の最も単純なアプローチが何であるか疑問に思っています。 – loeschg