JUnitでは、パラメーター化されたテストは、テストが複数回インスタンス化されることを保証する特別なランナーを使用するため、各テストメソッドは複数回呼び出されます。Mockitoは特定の単体テストを作成するためのツールであるため、異なるMockitoの期待値で同じテストを複数回実行する組み込み機能はありません。
テスト条件を変更したい場合は、次のいずれかを実行するのが最善の策です。
- 必要なモック入力のパラメーターを使用して、JUnitを使用してテストをパラメーター化します。
- テストでさまざまなパラメータのループを実行します。これにより、残念ながら「メソッドごとに1つのテスト」の哲学が回避されます。
@Test
実際にテストを実行するメソッドを抽出し、必要なモックごとに新しいメソッドを作成します。
@Parameterized
テストパラメータとしてモックオブジェクトを使用することは禁止されていないことに注意してください。モックに基づいてパラメーター化することを検討している場合は、それを行うことができます。モックを作成し、テストの静的メソッドで期待値を設定することもできます。
ランナーに関する注意:このパラメーター化されたテストランナーは、MockitoのMockitoJUnitRunnerと競合します:各テストクラスは1つのランナーのみを持つことができます。両方を使用する場合は、セットアップに@Beforeメソッドと@Afterメソッド、またはMockitoJUnit4ルールに切り替えることをお勧めします。
例として、パラメータ化されたランナーとJUnitルールの詳細を説明する別の回答から圧縮し、JUnit4のパラメータ化されたテストのドキュメントページとMockitoRuleのドキュメントページから持ち上げます。
@RunWith(Parameterized.class)
public class YourComponentTest {
@Rule public MockitoRule rule = MockitoJUnit.rule();
@Mock YourDep mockYourDep;
@Parameters public static Collection<Object[]> data() { /* Return the values */ }
public YourComponentTest(Parameter parameter) { /* Save the parameter to a field */ }
@Test public void test() { /* Use the field value in assertions */ }
}