2012-04-18 15 views
20

मैं मॉकिटो के लिए नया हूं और मैं सोच रहा था कि मैं एक गेट/सेट जोड़ी कैसे लगा सकता हूं। यदि एक परीक्षण में कहीं मैं setString("something"); आह्वान मैं getString() चाहते हैं "कुछ" लौटने के लिए:मॉकिटो: गेटर सेटर को कैसे दबाएं

उदाहरण

public interface Dummy { 
    public String getString(); 
    public void setString(String string); 
} 

के लिए मैं कैसे उन्हें ठीक से व्यवहार करते हैं कर सकते हैं। क्या यह व्यवहार्य है या ऐसे मामलों को संभालने का एक बेहतर तरीका है?

+1

वहाँ एक कारण है कि आप 'उपहास करने के लिए Dummy' चाहते हैं और सिर्फ एक नियमित रूप से वस्तु उपयोग नहीं कर सकते है:

होने

class Dog { private Sound sound; public Sound getSound() { return sound; } public void setSound(Sound sound) { this.sound = sound; } } class Sound { private String syllable; Sound(String syllable) { this.syllable = syllable; } } 

मैं गेटर को सेटर कनेक्ट करने के लिए निम्नलिखित का इस्तेमाल किया इसे लागू करना? – darrengorman

+1

क्या @milkplusvellocet ने कहा। साथ ही, यदि आप वास्तव में एक सेटर का परीक्षण करना चाहते हैं, तो आप परीक्षण कर रहे हैं और/या सेटर्स गलत कर रहे हैं। –

+0

@milkplusvellocet वास्तव में मैं HttpServletRequest को दबा रहा हूं और मैं चरित्र SetEncoding संपत्ति को काम करना चाहता हूं। एक नियमित वस्तु का उपयोग करने के लिए लागू करने के कई तरीके हैं। यह मुझे सोचता है, क्या हम अमूर्त वर्गों का मज़ाक उड़ा सकते हैं? यदि ऐसा है, तो यह मेरे लिए एक समाधान होगा। मैं कल देखूंगा, मेरे पास मेरा वर्कस्पेस नहीं है। –

उत्तर

28

मैं भी चाहता था कि गेटर हाल ही में सेटटर कॉल के परिणाम को वापस कर दे।

final Dog mockedDog = Mockito.mock(Dog.class, Mockito.RETURNS_DEEP_STUBS); 
// connect getter and setter 
Mockito.when(mockedDog.getSound()).thenCallRealMethod(); 
Mockito.doCallRealMethod().when(mockedDog).setSound(Mockito.any(Sound.class)); 
0

इस विशेष मामले में HttpServletRequest छोटा करते मैं दृढ़ता से वसंत-नकली ढांचे का उपयोग करने की सलाह देते के लिए: (http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/mock/web/package-summary.html)

यह वेब आधारित कार्यों के लिए निर्मित mocks है।

अन्यथा अपने मज़ाक उड़ाया वस्तुओं (http://mockito.googlecode.com/svn/branches/1.8.5/javadoc/org/mockito/stubbing/Answer.html)

6

मैं तीन संभावित दृष्टिकोण के बारे में सोच सकते हैं के लिए अपनी खुद की प्रतिक्रिया को परिभाषित करने के उत्तर का उपयोग करें।

  1. सीधे अपने आवेदन में HttpServletRequest का उपयोग न करें; इसके लिए एक रैपर वर्ग बनाओ, और रैपर वर्ग के लिए एक इंटरफ़ेस है। जहां भी आप वर्तमान में आवेदन में HttpServletRequest का उपयोग करते हैं, इसके बजाय इंटरफ़ेस का उपयोग करें। फिर परीक्षण में, इस इंटरफ़ेस का वैकल्पिक कार्यान्वयन करें। फिर, आपको बिल्कुल मॉकिटो मॉक की आवश्यकता नहीं है।

  2. अपनी परीक्षा कक्षा में एक फ़ील्ड है जो उस मान को संग्रहीत करता है जिसे आपने String पर सेट किया है। दो मॉकिटो Answer ऑब्जेक्ट्स बनाएं; एक जो getString पर इस फ़ील्ड का मान देता है, और दूसरा जो इस क्षेत्र का मान सेट करता है जब setString कहा जाता है। सामान्य तरीके से एक नकली बनाओ, और इन दोनों उत्तरों का उपयोग करने के लिए इसे दबाओ।

  3. एक अमूर्त वर्ग (जो आपकी टेस्ट क्लास का एक स्थिर आंतरिक वर्ग हो सकता है) बनाएं जो HttpServletRequest इंटरफ़ेस लागू करता है, लेकिन वह फ़ील्ड है जिसे आप सेट करना चाहते हैं, और गेटर और सेटर को परिभाषित करता है। फिर अमूर्त वर्ग का मज़ाक उड़ाएं, और Mockito.CALLS_REAL_METHODS को डिफ़ॉल्ट उत्तर के रूप में पास करें। जब आप गेट पर गेटर या सेटर को कॉल करते हैं, तो असली विधि किक कर लेती है, जो आप चाहते हैं वह व्यवहार है।

उम्मीद है कि इन तीन विकल्पों में से एक आपकी आवश्यकताओं को पूरा करेगा।

+1

HttpSevletRequest वास्तव में एक इंटरफ़ेस है, केवल एक चीज यह है कि इसे करने के लिए इसे लागू करने के लिए कई तरीके हैं। दूसरे विकल्प के लिए, यह शायद सबसे अच्छा तरीका है। मैं एक अमूर्त वर्ग का उपयोग करना पसंद करता था जो केवल उन दो तरीकों को परिभाषित करता है। मैं जो समाधान चुना है उसे पोस्ट करूंगा। –

+0

अरे, क्षमा करें, मैं भूल गया कि यह एक इंटरफ़ेस था। मैं विकल्प 1 के बारे में निश्चित नहीं हूं; मुझे यह जानने के लिए आपके कोड के बारे में और जानना होगा कि क्या मैं इसे काम पर ला सकता हूं। क्या आप विकल्प 2 का प्रयास करना चाहते हैं? अगर आपको इसकी ज़रूरत है तो मुझे मदद करने में खुशी होगी। –

+0

दरअसल, मुझे लगता है कि एक अमूर्त वर्ग का उपयोग मॉकिटो में काम कर सकता है। मुझे बस इतना करना होगा कि मैं गेटटर और सेटर के लिए "वास्तविक तरीकों" का आह्वान करना चाहता हूं। मुझे यह लिंक मिल गया जो दिलचस्प हो सकता है: http://marcschwieterman.com/blog/simple-stub-creation-with-mockito-partial-mocks/ –

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