2015-10-05 4 views
5

Ich versuche, ein Mock-Objekt zu Testmethode durch Datenanbieter übergeben. Unten ist mein Test-Klasse:Wie kann ich Mock-Objekt im Datenprovider mit Mockito TestNG übergeben?

@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(); 
} 
} 

Allerdings, wenn ich dies ausführen, zeigt es

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

, die beide Male ein Null-Objekt Einrichtung übergeben. Was ist der Grund dafür? Und wie bekomme ich das gewünschte Verhalten? Ich möchte alle if-else-Anweisungen in der Testmethode vermeiden und beide Fälle in derselben Methode mit dem Datenprovider testen. Gibt es einen Weg dafür?

Antwort

1

Testng ruft Methoden in dieser bestimmten Reihenfolge auf: serviceData, beforeMethod und m1.

Wenn Sie einen Schein mit einem Datenprovider übergeben möchten, müssen Sie ihn vor oder in der Datenprovidermethode erstellen.

+0

Danke! Verschieben MockitoAnnotations.initMocks (this); zu serviceData hat es gelöst. – Caesar

0

Sie können auch @BeforeTest Methode verwenden, die vor @DataProvider Methode ausgeführt wird.

Verwandte Themen