jUnit の複数の RunWith ステートメント 質問する

jUnit の複数の RunWith ステートメント 質問する

ユニットテストを記述し、1 つのテスト クラスにJUnitParamsRunnerおよびを使用したいと考えています。MockitoJUnitRunner

残念ながら、以下は機能しません。

@RunWith(MockitoJUnitRunner.class)
@RunWith(JUnitParamsRunner.class)
public class DatabaseModelTest {
  // some tests
}

1 つのテスト クラスで Mockito と JUnitParams の両方を使用する方法はありますか?

ベストアンサー1

仕様によれば、同じ注釈付き要素に同じ注釈を 2 回付けることはできないため、これを行うことはできません。

では、解決策は何でしょうか? 解決策は、@RunWith()どうしても必要なランナーを 1 つだけ配置し、もう 1 つを別のものに置き換えることです。あなたの場合は、削除して、それが行うことをプログラム的に実行することになると思いますMockitoJUnitRunner

実際に実行されるのは次のものだけです:

MockitoAnnotations.initMocks(test);

テストケースの始めに。したがって、最も簡単な解決策は、このコードをsetUp()メソッドに配置することです。

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

よく分かりませんがおそらくフラグを使用してこのメ​​ソッドを複数回呼び出すことは避けてください。

private boolean mockInitialized = false;
@Before
public void setUp() {
    if (!mockInitialized) {
        MockitoAnnotations.initMocks(this);
        mockInitialized = true;  
    }
}

ただし、JUnt のルールを使用すると、より優れた再利用可能なソリューションを実装できます。

public class MockitoRule extends TestWatcher {
    private boolean mockInitialized = false;

    @Override
    protected void starting(Description d) {
        if (!mockInitialized) {
            MockitoAnnotations.initMocks(this);
            mockInitialized = true;  
        }
    }
}

次に、テスト クラスに次の行を追加します。

@Rule public MockitoRule mockitoRule = MockitoJUnit.rule();

このテスト ケースは任意のランナーで実行できます。

おすすめ記事