2012-12-20 35 views
6

में JUnit सेटअप विधि के समान कुछ भी मैं परिदृश्यवहाँ Mockito

interface DAO 
{ 
     String a(); 
     String b(); 
     String c(); 

} 

निम्नलिखित है मैं इस डीएओ इंटरफ़ेस का एक नकली बना सकते हैं और मैं कुछ DAOProcess कहा जाता है करने के लिए इसे फ़ीड है। डीएओप्रोसेस के अंदर, मेरे पास डीएओ विधियों ए, बी और सी को कॉल करने के कई तरीके हैं।

अब जब भी मुझे डीएओप्रोसेस में एक विधि का परीक्षण करने की आवश्यकता होती है, तो मैं when(mockDAO.a()).thenReturn("test") लिखना समाप्त कर दूंगा।

क्या वैसे भी मैं इन when(mockDAO.a()).thenReturn("test") सभी परीक्षण मामलों में सामान्य स्थानांतरित कर सकता हूं?

उत्तर

9

अपने परीक्षण मामलों सब एक कक्षा में एक विधि @Before साथ एनोटेट, जैसे का उपयोग कर सकता रहे हैं:

... 
private DAO mockDAO; 

@Before 
public void setUp() { 
    mockDAO = mock(DAO.class); 
    when(mockDAO.a()).thenReturn("test"); 
    ...etc... 
}  
... 

या, यदि आपको कई परीक्षण कक्षाओं पर व्यवहार की आवश्यकता है तो आप एक मॉक इंस्टेंस पर व्यवहार सेट करने के लिए उपयोगिता वर्ग लिख सकते हैं, उदाहरण के लिए:

public class MockDAOPrototype { 
    public DAO getMockWithDefaultBehaviour() { 
     final DAO mockDAO = mock(DAO.class); 
     when(mockDAO.a()).thenReturn("test"); 
     ...etc... 

     return mockDAO; 
    } 
} 

और फिर अपने setUp विधि में MockDAOPrototype.getMockWithDefaultBehaviour() कहते हैं।

2

आप एक सार टेस्टकेस क्लास बना सकते हैं जो abstract है और यह सभी परीक्षण मामलों द्वारा बढ़ाया जाता है जहां आपको इस नकली की आवश्यकता होती है। उस सार परीक्षण मामले में, आपके पास निम्नलिखित कथन होंगे।

@Ignore // just in case your runner thinks this is a JUnit test. 
public abstract class AbstractTestCase 
{ 
     @Mock 
     private DAO mockDAO; 

     @Before 
     private void setupMocks() 
     { 
      when(mockDAO.a()).thenReturn("test") 
      .... 
     } 
} 

अपने ठोस परीक्षण का मामला कक्षाओं में, क्या तुम करोगी

public class MyConcreteTestCase extends AbstractTestCase 
{ 
     @InjectMocks 
     @Autowired 
     private DAOProcess daoProcess; 

     .... 
} 
+0

मैं यहां ऑटोवायर एनोटेशन का उपयोग नहीं करता, क्योंकि यह वसंत सामग्री के साथ भ्रमित हो सकता है। भले ही डीओप्रोसेस स्प्रिंग संदर्भ में बनाया गया हो, मुझे यकीन नहीं है कि सहयोगी के संदर्भों को मोक्स द्वारा प्रतिस्थापित करने के लिए टीआई एक बुद्धिमान विचार होगा, जबकि इन बीम अभी भी वसंत द्वारा प्रबंधित हैं! – Brice