ユニットテストを記述し、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();
このテスト ケースは任意のランナーで実行できます。