2015-10-05 12 views
5

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?

Trả lời

1

Testng là phương thức gọi theo thứ tự cụ thể này: serviceData, beforeMethod và m1.

Nếu bạn muốn chuyển mô hình với nhà cung cấp dữ liệu, bạn phải tạo mô hình đó trước hoặc vào phương pháp nhà cung cấp dữ liệu.

+0

Cảm ơn! Chuyển MockitoAnnotations.initMocks (điều này); để serviceData giải quyết nó. – Caesar

0

Bạn cũng có thể sử dụng phương pháp @BeforeTest, được chạy trước phương pháp @DataProvider.

Các vấn đề liên quan