2015-10-05 30 views
5

Próbuję przekazać próbny obiekt do metody testowania za pośrednictwem dostawcy danych. Poniżej jest moja klasa Test:Jak mogę przekazać fałszywy obiekt w dostawcy danych przy użyciu 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(); 
} 
} 

Jednak gdy uruchamiam to, wyświetla

PASSED: m1(null, 2) 
FAILED: m1(null, 1) 

które oznacza zarówno razy null obiekt zostanie przekazany. Jaki jest tego powód? I jak mogę uzyskać pożądane zachowanie? Chcę uniknąć wszelkich instrukcji if-else w metodzie testowania i chcę przetestować oba przypadki w tej samej metodzie, korzystając z dostawcy danych. Czy jest na to sposób?

Odpowiedz

1

Testng wywołuje metody w tej kolejności: serviceData, beforeMethod i m1.

Jeśli chcesz przekazać próbę z dostawcą danych, musisz go utworzyć przed lub w metodę dostawcy danych.

+0

Dzięki! Przesuwanie MockitoAnnotations.initMocks (this); do serviceData go rozwiązał. – Caesar

0

Można również użyć metody @BeforeTest, która jest uruchamiana przed metodą @DataProvider.