के किसी भी उदाहरण पर तरीकों का मज़ाक उड़ाते हुए मैं परीक्षण की सुविधा के लिए उत्पादन कोड में किसी वर्ग के किसी भी उदाहरण पर तरीकों का नकल करना चाहता हूं। क्या पाइथन में कोई पुस्तकालय है जो इसे सुविधाजनक बना सकता है?एक पायथन वर्ग
असल में, मैं निम्नलिखित करना चाहते हैं, लेकिन अजगर (निम्नलिखित कोड रूबी, मोचा लाइब्रेरी का उपयोग कर रहा है) में:
def test_stubbing_an_instance_method_on_all_instances_of_a_class
Product.any_instance.stubs(:name).returns('stubbed_name')
assert_equal 'stubbed_name', SomeClassThatUsesProduct.get_new_product_name
end
ऊपर से नोट करना महत्वपूर्ण बात यह है कि मैं यह नकली करने की जरूरत है कक्षा के स्तर पर, क्योंकि मुझे वास्तव में जिस चीज का परीक्षण हो रहा है, उसके द्वारा बनाई गई एक घटना पर विधियों को नकल करने की आवश्यकता है।
प्रयोग करें प्रकरण:
मैं एक वर्ग QueryMaker
जो RemoteAPI
का एक उदाहरण पर एक प्रणाली को बुलाती है। मैं कुछ स्थिरता वापस करने के लिए RemoteAPI.get_data_from_remote_server
विधि का नकल करना चाहता हूं। कैसे मैं क्या परिवेश में वह चल रहा है के लिए जाँच करने RemoteAPI
कोड के भीतर एक विशेष मामला डाल करने के लिए बिना एक परीक्षण के अंदर ऐसा करते हैं
मैं क्या कार्रवाई में करना चाहता था का उदाहरण:।
# a.py
class A(object):
def foo(self):
return "A's foo"
# b.py
from a import A
class B(object):
def bar(self):
x = A()
return x.foo()
# test.py
from a import A
from b import B
def new_foo(self):
return "New foo"
A.foo = new_foo
y = B()
if y.bar() == "New foo":
print "Success!"
मैं बिल्कुल का पालन नहीं कर रहा हूँ कि यह कैसे काम करता है। क्या यह मेरे उपयोग के मामले को पूरा करता है? –
यह चाहिए; आपका उपयोग केस आपके उदाहरण के समान ही है। असल में, कक्षा पर विधि की परिभाषा को बदलकर, आप सभी मामलों पर भी अपनी परिभाषा बदल रहे हैं। 'Classmethod' फ़ंक्शन एक रैपर बनाता है जो मूल रूप से फ़ंक्शन को एक विधि में बदल देता है, और 'lambda' फ़ंक्शन को केवल स्थिर स्ट्रिंग को वापस करने के लिए परिभाषित करता है। – kindall
... लेकिन मेरा संपादन देखें। – kindall