2015-10-05 8 views
5

मैं डेटा प्रदाता के माध्यम से विधि का परीक्षण करने के लिए एक नकली वस्तु को पारित करने की कोशिश कर रहा हूं।मैकिटो टेस्टएनजी का उपयोग करके मैं डेटा प्रदाता में नकली ऑब्जेक्ट कैसे पास कर सकता हूं?

@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) 

जो दोनों बार एक अशक्त वस्तु पारित हो जाता है का मतलब है: नीचे अपने परीक्षण वर्ग है। इसके पीछे का कारण क्या है? और मैं वांछित व्यवहार कैसे प्राप्त कर सकता हूं? मैं परीक्षण विधि में किसी भी अन्य बयान से बचना चाहता हूं, और डेटा प्रदाता का उपयोग करके दोनों मामलों को एक ही विधि में जांचना चाहता हूं। क्या इसके लिए कोई रास्ता है?

उत्तर

1

टेस्टिंग इस विशिष्ट क्रम में विधियों को कॉल कर रहा है: serviceData, method और m1 से पहले।

यदि आप डेटा प्रदाता के साथ एक नकली पास करना चाहते हैं, तो आपको डेटा प्रदाता विधि से पहले या इसे बनाना होगा।

+0

धन्यवाद! MockitoAnnotations.initMocks स्थानांतरित (यह); सेवा के लिए इसे हल किया। – Caesar

0

आप @BeforeTest विधि का भी उपयोग कर सकते हैं, जो @DataProvider विधि से पहले चलाया जा सकता है।

संबंधित मुद्दे

 संबंधित मुद्दे