2010-05-24 12 views
17

में किसी भी_इंसेन्स के मोचा स्टबिंग को पूर्ववत करने का कोई तरीका है this question की तरह, मैं भी रयान बेट्स के निफ्टी_स्काफोल्ड का उपयोग कर रहा हूं। यह नियंत्रक के पीछे दफन किए गए मॉडल ऑब्जेक्ट्स में "अमान्य" स्थिति को बल देने के लिए मोचा की any_instance विधि का उपयोग करने का वांछनीय पहलू है।क्या टेस्ट :: यूनिट

मुझसे जुड़े प्रश्न के विपरीत, मैं आरएसपीसी का उपयोग नहीं कर रहा हूं, लेकिन टेस्ट :: यूनिट। इसका मतलब है कि दो आरएसपीसी-केंद्रित समाधान मेरे लिए काम नहीं करेंगे।

क्या कोई सामान्य है (यानी: टेस्ट :: यूनिट के साथ काम करता है) किसी भी_स्टेंस स्टबिंग को हटाने के लिए? मेरा मानना ​​है कि यह मेरे परीक्षणों में एक बग पैदा कर रहा है, और मैं इसे सत्यापित करना चाहता हूं।

उत्तर

31

ऐसा होता है, मोचा 0.10.0 unstubbing on any_instance() अनुमति देता है।

str = "Not Stubbed!" 
String.any_instance.stubs(:to_s).returns("Stubbed!") 
puts str.to_s # "Stubbed!" 
String.any_instance.unstub(:to_s) 
puts str.to_s # "Not Stubbed!" 
4

मोचा ऐसी कार्यक्षमता प्रदान नहीं करता है। हालांकि आप इसे स्वयं लागू कर सकते हैं।

सबसे पहले हमें mocha के बारे में पता होना चाहिए कि mocha वास्तव में मूल विधियों को प्रतिस्थापित करता है जब आप उन्हें दबाते हैं। तो बाद में इन विधियों को पुनर्स्थापित करने में सक्षम होने के लिए, आपको पूर्व के संदर्भ में अवश्य रखना चाहिए। इसे आसानी से प्राप्त किया जा सकता है: alias new_method old_method। यह old_method पर मजाक करने से पहले किया जाना चाहिए।

अब, किसी विधि को अनमॉक करने के लिए, आपको केवल alias old_method new_method की आवश्यकता है।

निम्नलिखित कोड पर विचार करें:

class A 
    def a 
     true 
    end 
end 


class TestA < Test::Unit::TestCase 
    def test_undo_mock 
     a = A.new 
     A.class_eval {alias unmocked_a a} 

     A.any_instance.stubs(:a).returns("b") 
     assert a.a, "b" 

     A.class_eval {alias a unmocked_a} 
     assert a.a, "a" 
    end 
end 
+0

उत्कृष्ट। ऐसा कुछ ऐसा लगता है जिसे मोचा में भी जोड़ा जा सकता है/बंद कर दिया जा सकता है। –

+0

मुझे इस कार्यक्षमता की आवश्यकता कभी महसूस नहीं हुई है, लेकिन एक टिकट है - http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/69-allow-unstubbing-of-methods यदि आप लॉबी करना चाहते हैं परिवर्तन के लिए। यह बहुत अच्छा होगा अगर आपके पास कुछ उदाहरण हैं कि आप इसका उपयोग क्यों करना चाहते हैं। –

+0

मैंने अनस्टबिंग कार्यक्षमता को जोड़ा है - मोचा :: ऑब्जेक्ट मैथ्यू # अनस्ट्यूब - देखें http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009 –

0

आप एक ही बार में अपने सभी स्टब्स/उम्मीदों को निकालना चाहते हैं, तो आप उस mocha_teardown का उपयोग कर (जैसे। Self.mocha_teardown कहते हैं) कर सकते हैं।

हालांकि, इस मामले में थोड़ा विनाशकारी हो सकता है।

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