7

データ プロバイダーを介してモック オブジェクトをテスト メソッドに渡そうとしています。以下は私のテストクラスです:

@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) 

つまり、どちらも null オブジェクトが渡されます。この背後にある理由は何ですか? そして、どうすれば望ましい動作を得ることができますか? テスト メソッドで if-else ステートメントを使用しないようにし、データ プロバイダーを使用して同じメソッドで両方のケースをテストしたいと考えています。方法はありますか?

4

2 に答える 2

3

Testng は、serviceData、beforeMethod、m1 という特定の順序でメソッドを呼び出しています。

データ プロバイダーでモックを渡したい場合は、データ プロバイダー メソッドの前または中に作成する必要があります。

于 2015-10-06T03:56:02.717 に答える