2009-12-29 16 views

उत्तर

11

डिफ़ॉल्ट रूप से, Easymock किसी भी विधियों के लिए अपवाद फेंक देगा जिसे कहा जाता है कि आपने स्पष्ट रूप से अपेक्षाओं को निर्धारित नहीं किया है।

14

EasyMock documentation से:

अच्छा Mocks

नकली द्वारा लौटाए गए एक नकली वस्तु पर() सभी तरीकों के लिए डिफ़ॉल्ट व्यवहार सभी अप्रत्याशित विधि कॉल के लिए एक AssertionError फेंक रहा है। यदि आप एक "अच्छा" मॉक ऑब्जेक्ट चाहते हैं जो डिफ़ॉल्ट रूप से सभी विधि कॉल की अनुमति देता है और उचित रिक्त मान (0, शून्य या गलत) देता है, तो इसके बजाय niceMock() का उपयोग करें।

तो आप जो पूछ रहे हैं वह डिफ़ॉल्ट व्यवहार है।

+0

मुझे डिफ़ॉल्ट व्यवहार परेशान लगता है क्योंकि परीक्षण में जांच की जा रही जांच में "आवश्यकता" बहुत आसानी से समाप्त होती है। मैंने एक बार एक लूप के बाहर एक getSomething() कॉल को स्थानांतरित करने का एक सरल रिफैक्टर किया, जिसके कारण परीक्षण विफल हो गया क्योंकि मैंने फोन नहीं किया था 40 बार (!), और "गैर-अच्छे" मोक्स इस प्रकार के परीक्षण को प्रोत्साहित करते हैं (इसके बाद से अगर मैं रिफैक्टरिंग से पहले केवल एक कॉल की उम्मीद करता तो असफल हो जाएगा)। –

+1

@Stein: सहमत हुए। यूनिट परीक्षणों को ठीक से तैयार किया जाना चाहिए, आदर्श रूप से केवल एक चीज का परीक्षण करना चाहिए। "गैर-अच्छे" मोक्स इसे हतोत्साहित करते हैं। –

+1

प्रश्न के मेरे पढ़ने से, ओपी एक मॉक चाहता है जो इसे कॉल होने पर सत्यापन में विफल रहेगा। अच्छा मोक्स ओपी चाहता है जो नहीं चाहता है क्योंकि जब परीक्षण के दौरान एक अच्छा मजाक कहा जाता है तो यह अभी भी सत्यापन पास करता है। –

14

मुझे पता है कि यह प्रश्न बहुत पुराना है लेकिन मेरे पास ओपी के समान प्रश्न था और कुछ और आसपास देख रहे थे। मुझे निम्नलिखित समाधान मिला:

अपने EasyMock घोषणा के अंत में .andThrow(new AssertionFailedError()).anyTimes(); जोड़कर परीक्षण मॉक विधि कहलाता है जब परीक्षण विफल हो जाएगा।

यह कारण है कि यह नाइसमैक का उपयोग न करने और अनमॉक विधि कॉल के कारण परीक्षण विफल होने की वजह से बेहतर है क्योंकि यह आपको विशेष रूप से परीक्षण करने की अनुमति देता है कि दिए गए परिदृश्य में XYZ विधि को नहीं बुलाया गया था।

मैं इस जवाब के लिए डेविड वालेस क्रेडिट देना चाहता हूं। मुझे निम्न पोस्ट पर उनके उत्तर में यह समाधान मिला: Test that void method didn't get called with EasyMock

+2

मेरा मानना ​​है कि यह स्वीकार्य उत्तर होना चाहिए। कारण यह है कि यूनिट परीक्षण अक्सर नई आवश्यकताओं के साथ बदल जाते हैं और यह याद करना बहुत आसान है कि नकली अपेक्षा क्यों सेट नहीं की गई थी। यह समाधान गायब विधि कॉल को स्पष्ट करता है, इस प्रकार कोड बदलने वाले व्यक्ति से अधिक ध्यान देने की मांग करता है। – mindreader

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