如何使用 Mockito TestNG 在数据提供者中传递模拟对象?
How can I pass mock object in data provider, using Mockito TestNG?
我正在尝试通过数据提供程序将模拟对象传递给测试方法。下面是我的测试 class:
@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 语句,并希望使用数据提供程序在同一方法中测试这两种情况。有办法吗?
Testng 正在按此特定顺序调用方法:serviceData、beforeMethod 和 m1。
如果您想通过数据提供程序传递模拟,则必须在数据提供程序方法之前或之中创建它。
您也可以使用@BeforeTest
方法,即在@DataProvider
方法之前使用运行。由于之前执行了 @BeforeTest
,因此 @DataProvider
方法能够使用模拟。
@BeforeTest
不要与 @BeforeMethod
混淆。参见 What is the difference between BeforeTest and BeforeMethod in TestNG。
我正在尝试通过数据提供程序将模拟对象传递给测试方法。下面是我的测试 class:
@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 语句,并希望使用数据提供程序在同一方法中测试这两种情况。有办法吗?
Testng 正在按此特定顺序调用方法:serviceData、beforeMethod 和 m1。
如果您想通过数据提供程序传递模拟,则必须在数据提供程序方法之前或之中创建它。
您也可以使用@BeforeTest
方法,即在@DataProvider
方法之前使用运行。由于之前执行了 @BeforeTest
,因此 @DataProvider
方法能够使用模拟。
@BeforeTest
不要与 @BeforeMethod
混淆。参见 What is the difference between BeforeTest and BeforeMethod in TestNG。