私のテスト クラスのすべてのテストは、@Before
各テストの実行前に「before」メソッド (JUnit の アノテーションが付けられています) を実行します。
メソッドの前にこれを実行しないようにするには、特定のテストが必要です。
それを行う方法はありますか?
TestRuleを使用してこれを行うことができます。前にスキップしたいテストに説明のアノテーションを付けてから、TestRuleのapplyメソッドで、そのアノテーションをテストして、次のように実行できます。
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();
}
};
}
@Enclosed
ランナーを使用して、2 つの内部テスト クラスを使用できるようにすることを検討してください。1 つは必要な@Before
メソッドを使用し、もう 1 つは使用しません。
@RunWith(Enclosed.class)
public class Outer{
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(){}
}
}
残念ながら、このロジックをコーディングする必要があります。JUnitにはそのような機能はありません。通常、2 つの解決策があります。
@RequiresBefore
これを必要とするテストをこの注釈でマークします。テスト ランナーはアノテーションを解析し、「before」メソッドを実行するかどうかを決定します。2 番目の解決策はより明確です。最初のものはより単純です。これは、それらのいずれかを選択するのはあなた次第です。
Mockito、特に Mockito 3.0 を使用している場合、すべてのスタブは「厳密」になり、デフォルトで検証されます。
Mockito lenient() メソッドを使用できます。
詳細はこちら: https://www.baeldung.com/mockito-unnecessary-stubbing-exception#lenient-stubbing
@After メソッドが @Before で行われた作業をクリアできる場合は、@Test メソッドの先頭で @After メソッドを手動で呼び出すことができます。