2016-11-24 21 views
4

これはthis questionから続きます。新しい質問を開始するよう求められます。JUnit @Ruleを使用してMockitoによるパラメータ化されたテスト?

問題は、JUnit Ruleについて、またはRunnersなどで起こっていることが、Jeff Bowmanによって暗示された方法で問題を解決するのに十分ではないということです。

+0

あなたはチュートリアルを通過しましたか? http://www.vogella.com/tutorials/JUnit/article.htmlパラメータ化されたテスト用のセクションもあります –

+0

@TimothyTruckle私の質問のポイントは、私が望むなら独自のRunWithアノテーションを使用するMockitoを使いたいということです(特に)モックを注入する。これが問題です。私はジェフ・ボウマンがこの質問に答えることができると信じる理由があります。しかし、彼は私に新しい質問をして欲しかった... –

+0

@mikerodentチュートリアルでは、mockitoについてのあなたの質問にすべて答えます。問題は、あなたが何かを学びたいのですか、解決策をコピーしたいですか? –

答えて

13

あなたの後のコメントで、私はギャップを見つけました:ルールとしてMockitoを使用し、ランナーとしてパラメータ化する必要があります。

ランナーはテストの数を報告し、パラメータ化はテストメソッドの数とパラメータ化された入力の数に基づいてテストの数を操作するため、Parameterizedがパートランナープロセスのこれとは対照的に、Mockitoのランナまたはルールの使用は、単に@Beforeおよび@Afterのメソッドをカプセル化して、Mockitoアノテーションを初期化し、Mockitoの使用を検証するだけです。@Ruleインスタンスに隣接して動作する非常に簡単に行うことができますMockitoJUnitRunnerはvery nearly deprecatedです。 JUnit4 Parameterized TestドキュメントページとMockitoRuleドキュメントページから直接、ベビーベッドに

@RunWith(Parameterized.class) 
public class YourComponentTest { 

    @Rule public MockitoRule rule = MockitoJUnit.rule(); 
    @Mock YourDep mockYourDep; 

    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] {  
       { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } 
      }); 
    } 

    private int fInput; 

    private int fExpected; 

    public YourComponentTest(int input, int expected) { 
     fInput = input; 
     fExpected = expected; 
    } 

    @Test 
    public void test() { 
     // As you may surmise, this is not a very realistic example of Mockito's use. 
     when(mockYourDep.calculate(fInput)).thenReturn(fExpected); 
     YourComponent yourComponent = new YourComponent(mockYourDep); 
     assertEquals(fExpected, yourComponent.compute(fInput)); 
    } 
} 
+0

Brilliant。それで私たちには専門家が必要なのです! –

+0

データをモックすることは可能ですか?つまり、@Mock private int fInput'? – Atieh

+1

@Atiehもちろん、これまでに行ったことですが、パラメータ化はテストの実行回数とテストクラスがインスタンス化され、MockitoRuleが '@ Mock'パラメータが各テストケース(すなわち各テストクラスインスタンス内)にどのように設定されるかを制御します。パラメータ化されたランナーが' @RunWi th注釈とMockitoの初期化は何らかの形で起こります。 –

関連する問題