Tôi đang cố truyền đối tượng giả để kiểm tra phương thức thông qua nhà cung cấp dữ liệu. Dưới đây là lớp học thử nghiệm của tôi:Làm thế nào tôi có thể vượt qua đối tượng giả trong nhà cung cấp dữ liệu, sử dụng 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();
}
}
Tuy nhiên, khi tôi chạy này, nó sẽ hiển thị
PASSED: m1(null, 2)
FAILED: m1(null, 1)
có nghĩa là cả hai lần một đối tượng null được thông qua. lý do đằng sau này là gì? Và làm thế nào tôi có thể có được hành vi mong muốn? Tôi muốn tránh bất kỳ câu lệnh if-else nào trong phương thức thử và muốn kiểm tra cả hai trường hợp trong cùng một phương thức sử dụng nhà cung cấp dữ liệu. Có cách nào cho nó không?
Cảm ơn! Chuyển MockitoAnnotations.initMocks (điều này); để serviceData giải quyết nó. – Caesar