データプロバイダを通じてメソッドをテストするためにmockオブジェクトを渡そうとしています。以下は私のテストクラスである:私はこれを実行するとMockito TestNGを使用して、データプロバイダに模擬オブジェクトを渡すにはどうすればよいですか?
@Test
public class FirstTest {
@InjectMocks
First firstSpy;
@Mock
Second secondMock;
@Mock
Third thirdMock;
@BeforeMethod
public void beforeMethod() {
firstSpy = Mockito.spy(new First());
MockitoAnnotations.initMocks(this);
}
@DataProvider
private final Object[][] serviceData() {
return new Object [][] {
{thirdMock, 1},
{null, 2}
};
}
@Test(dataProvider="serviceData")
public void m1(Third thirdObject, int noOfTimesm3Called) {
Mockito.doReturn(secondMock).when(firstSpy).m4();
Mockito.doReturn(thirdObject).when(secondMock).m2();
firstSpy.m1();
verify(firstSpy, times(noOfTimesm3Called)).m3();
}
}
しかし、それはヌルオブジェクトが渡された両方の時間を意味
PASSED: m1(null, 2)
FAILED: m1(null, 1)
を表示します。これの背後にある理由は何ですか?そして、私はどのようにして望ましい行動を取ることができますか?私は、テストメソッドでif-elseステートメントを避け、データプロバイダを使用して同じメソッドで両方のケースをテストしたいと考えています。それのための方法はありますか?
ありがとうございます! MockitoAnnotations.initMocksをシフトする(this); serviceDataに解決しました。 – Caesar