यह सत्यापित करना आसान है कि मॉकिटो में एक मॉक ऑब्जेक्ट पर विशिष्ट इंटरैक्शन (विशिष्ट विधि कॉल) हुई, और यह जांचने के लिए है कि कोई इंटरैक्शन बिल्कुल नहीं हुआ है। मान लीजिए कि मैं info()
, warn()
, error()
आदि जैसी विधियों के साथ एक लॉगर की तरह एक इंटरफेस का परीक्षण कर रहा हूं। एक विशिष्ट परिदृश्य में मुझे पता है कि इन तरीकों में से एक को बुलाया जाना चाहिए, लेकिन मुझे वास्तव में परवाह नहीं है। क्या यह जांचने का एक कॉम्पैक्ट तरीका है कि नकली ऑब्जेक्ट के साथ कोई भी बातचीत बिना किसी विधि को निर्दिष्ट करने की आवश्यकता के बिना हुई है? या शायद इस तरह की एक तंत्र जरूरी नहीं है क्योंकि इसका परीक्षण करने का "मॉकिटो रास्ता" मैं कल्पना करता हूं उससे अलग होगा?क्या मैकिटो का उपयोग कॉम्पैक्ट तरीके से मनमाने ढंग से बातचीत करना संभव है?
उत्तर
यदि आप परीक्षण के तहत कक्षा से अपने लॉगर ऑब्जेक्ट के निर्माण को बाहरी कर सकते हैं, तो कोई कारण नहीं है कि आप लॉग इंटरफ़ेस का अपना परीक्षण कार्यान्वयन क्यों नहीं लिख सकते हैं जो रिकॉर्ड करेगा कि कौन सी विधियों का उपयोग किया गया था और इसे इंजेक्ट किया गया था आपका परीक्षण सेटअप
नकली पुस्तकालय बहुत अच्छे काम करते हैं, लेकिन कभी-कभी ऐसे कोने के मामले होते हैं जैसे आपको पता चला है कि वे आपकी आवश्यकताओं को कवर नहीं कर सकते हैं।
आप इस तरह के परीक्षण के लिए अपने स्वयं के कार्यान्वयन लिखते हैं, और yourt परीक्षण वर्ग में यह परीक्षण के अंतर्गत इंजेक्षन है, तो आप getCount() > 0
public class LoggerTestSupportImpl implements ILogger {
private int count = 0;
@Override
public int getCount() {
return count;
}
@Override
public void info(String message) {
count++;
}
@Override
public void warn(String message) {
count++;
}
}
, लकड़हारा मैं निम्नलिखित सेटअप करना परीक्षण करने के लिए:
verifyZeroInteractions(log4jAppender);
या
verify(log4jAppender).doAppend(any(LoggingEvent.class);
हैं:
@Mock private Appender log4jAppender;
private Logger logger;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Logger root = Logger.getRootLogger();
if (!root.getAllAppenders().hasMoreElements()) {
// No appenders means log4j is not initialized!
BasicConfigurator.configure();
}
logger = Logger.getLogger(MyClassWhichLogs.class);
logger.addAppender(log4jAppender);
}
और फिर अपने परीक्षण में मैं निम्न कार्य करें आपको लॉग किए गए मानों का परीक्षण करने की आवश्यकता है, आप इसके बजाय एक कैप्चर प्रदान कर सकते हैं:
ArgumentCaptor<LoggingEvent> logCaptor = ArgumentCaptor.forClass(LoggingEvent.class);
verify(log4jAppender).doAppend(logCaptor.capture());
assertTrue(logCaptor.getValue().contains("my text to match");
हालांकि यह सामान्यीकृत प्रश्न का उत्तर नहीं देता है (मुझे नहीं लगता कि आप जो खोज रहे हैं वह मौजूद है), यह लॉगिंग परीक्षण के लिए इस विशिष्ट समस्या को हल कर सकता है।
- 1. मनमाने ढंग से पाथ पर्यावरण
- 2. क्या स्ट्रिंग से मनमाने ढंग से पथ में FolderBrowserDialog.RootFolder सेट करना संभव है?
- 3. मनमाने ढंग से JSON कुंजी
- 4. मनमाने ढंग से आयामों का बेवकूफ टुकड़ा
- 5. क्या मेरी कार्यशील प्रतिलिपि को मनमाने ढंग से संशोधन के साथ तुलना करना संभव है?
- 6. विंडोज में मनमाने ढंग से सिग्नल भेजना?
- 7. एचटीएमएल में मनमाने ढंग से टैग का उपयोग करने से मुझे क्या रोक रहा है?
- 8. क्या प्रभावशाली ढंग से कार्य करने के लिए बूस्ट :: बाइंड का उपयोग करना संभव है?
- 9. संयोजन (या) मनमाने ढंग से नियमित अभिव्यक्ति
- 10. मनमाने ढंग से एसटीएल कंटेनर के लिए मनमाने ढंग से टाइप
- 11. एनएसडीटा के मनमाने ढंग से ब्लॉक को डीकोड करना?
- 12. क्या प्रोग्रामिंग रूप से पाइथन स्टैक फ्रेम का निर्माण करना संभव है और कोड में मनमाने ढंग से बिंदु पर निष्पादन शुरू करना संभव है?
- 13. मनमाने ढंग से लैम्ब्डा द्वारा छंटनी
- 14. ऑब्जेक्ट्स की मनमाने ढंग से लंबी सूची
- 15. PHP जेलिंग मनमाने ढंग से कोड
- 16. पर्ल रेगेक्स मनमाने ढंग से सेट
- 17. एसवीजी तत्व मनमाने ढंग से ऊंचाई
- 18. उपयोग jQuery एक मनमाने ढंग से गहरी सूची
- 19. ग्रोवी: एक मनमाने ढंग से (अज्ञात) नियमित अभिव्यक्ति से बचने
- 20. क्या Python से re2 का उपयोग करना संभव है?
- 21. क्या मेरे ऐप से आईओएस 5 के रिमाइंडर्स ऐप से बातचीत करना संभव है?
- 22. मैकिटो
- 23. पाइथन फ्लोटिंग पॉइंट मनमाने ढंग से सटीक उपलब्ध है?
- 24. क्या ज्योथन से एसडब्ल्यूटी का उपयोग करना संभव है?
- 25. क्या पाइथन में मनमाने ढंग से बड़ी स्ट्रिंग को संभालना संभव है? (* ऑपरेटर के माध्यम से बनाया)
- 26. क्या ईएलएफ फ़ाइल में मनमाने ढंग से डेटा जोड़ना ईएलएफ स्पेक का उल्लंघन करता है?
- 27. मनमाने ढंग से प्लेस घटक (x, y) निर्देशांक
- 28. क्या एलसीएमएल के लिए केस-असंवेदनशील तरीके से काम करना संभव है?
- 29. क्या सी/सी ++ के लिए एक मनमाने ढंग से सटीक फ़्लोटिंग पॉइंट लाइब्रेरी है जो मनमाने ढंग से सटीक एक्सपोनेंट की अनुमति देती है?
- 30. मैं सी में मनमाने ढंग से लंबी लाइन कैसे पढ़ूं?
पर जोर कर सकते हैं यह ठीक है कि कैसे मैं अपने वर्ग अब तक का परीक्षण किया गया है, मैं बस सोच रहा था कि क्या मॉकिटो मुझे सभी तरीकों के लिए छोटे कार्यान्वयन लिखने से बचा सकता है। –
मैं कहूंगा कि आप समझदार चीज़ मीकल कर रहे हैं। मॉकिटो इस तरह के परीक्षण का समर्थन नहीं करता है। केविन द्वारा उल्लिखित 'ArgumentCaptor' मार्ग को नीचे जाने का आपका एकमात्र विकल्प है, लेकिन इससे आपके परीक्षण वर्गों में बहुत सारे "शोर" होते हैं। – Brad
सहमत है कि यह थोड़ा शोर है, लेकिन अधिकांश शोर घोषणाओं और पहले विधि के लिए स्थानीयकृत है, और यदि आप एकाधिक टेस्ट विधियों में उपयोग किया जाना है तो भी कैप्चर को क्लास लेवल घोषणाओं में जोड़ सकते हैं (यदि संदेश तक पहुंच न हो तो भी आवश्यक नहीं है) । मॉकिटो का उपयोग करने के बारे में अच्छी बात यह है कि आपके पास पहले से ही पूर्ण लॉगिंग एपीआई तक पहुंच है। अपने उदाहरण में ऐसा करने के लिए आपको अपने हाथ से चलने वाले मॉक की क्षमताओं का विस्तार करना होगा (लॉग इन संदेशों के मनमानी # को कैप्चर/पुनर्प्राप्त करें) लेकिन सरल जरूरतों के लिए आपका तरीका सरल, क्लीनर, * और * पुन: प्रयोज्य लगता है, इसलिए वे हैं आपके दृष्टिकोण के लिए कुछ प्लस। –