26

私のテスト クラスのすべてのテストは、@Before各テストの実行前に「before」メソッド (JUnit の アノテーションが付けられています) を実行します。

メソッドの前にこれを実行しないようにするには、特定のテストが必要です。

それを行う方法はありますか?

4

8 に答える 8

24

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();
    }
  };
}
于 2012-10-22T18:27:34.703 に答える
20

@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(){}
  }

}
于 2012-10-22T18:20:37.260 に答える
12

残念ながら、このロジックをコーディングする必要があります。JUnitにはそのような機能はありません。通常、2 つの解決策があります。

  1. テスト ケースを 2 つのテスト ケースに分けるだけです。1 つは実行前に必要なテストを含み、もう 1 つはそれを必要としないテストを含みます。
  2. 実行中の独自のテストを実装し、テストに注釈を付けて使用します。独自の注釈を作成し、@RequiresBeforeこれを必要とするテストをこの注釈でマークします。テスト ランナーはアノテーションを解析し、「before」メソッドを実行するかどうかを決定します。

2 番目の解決策はより明確です。最初のものはより単純です。これは、それらのいずれかを選択するのはあなた次第です。

于 2012-10-22T18:13:24.347 に答える
0

Mockito、特に Mockito 3.0 を使用している場合、すべてのスタブは「厳密」になり、デフォルトで検証されます。

Mockito lenient() メソッドを使用できます。

詳細はこちら: https://www.baeldung.com/mockito-unnecessary-stubbing-exception#lenient-stubbing

于 2020-11-24T16:59:43.743 に答える
0

@After メソッドが @Before で行われた作業をクリアできる場合は、@Test メソッドの先頭で @After メソッドを手動で呼び出すことができます。

于 2021-11-29T12:51:03.750 に答える