का उपयोग करके फ़ंक्शन को पैच करना मेरे पास एक टेस्ट सूट (नाक का उपयोग करके, अनजान नहीं है) है, और मैं टेस्ट क्लास में प्रत्येक टेस्ट के लिए मानों के विशिष्ट अनुक्रम को वापस करने के लिए फ़ंक्शन पैच करना चाहता हूं। मेरा पहला प्रयास, एक सरल उदाहरण का उपयोग करते हुए, था:मॉक
@patch('time.clock', MagicMock(side_effects=[1, 2]))
class Tests:
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
हालांकि, MagicMock उदाहरण केवल एक बार, तो दूसरे टेस्ट में विफल रहता है जब दुष्प्रभाव रन आउट बनाई गई है। मैं प्रत्येक टेस्ट विधि को अलग से पैच कर सकता हूं, लेकिन मैं वास्तव में उन सभी पर पैच सजावट को डुप्लिकेट नहीं करना चाहता हूं (इस उदाहरण की तुलना में बहुत अधिक परीक्षण हैं!) जिस तरह से मैं इसे कर सकता हूं वह पैच बनाना है इस तरह सेटअप कोड:
class Tests:
def setup(self):
self.old_clock = time.clock
time.clock = MagicMock(side_effects=[1, 2])
def teardown(self):
time.clock = self.old_clock
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
लेकिन बचत और बहाल मूल कार्य परिभाषा कुछ है कि नकली स्वचालित रूप से ऐसा करने में सक्षम होना चाहिए की तरह लगता है। क्या ऐसा करने का कोई और तरीका है कि मुझे याद आ रही है? या मेरा आखिरी उदाहरण यह करने का सबसे अच्छा तरीका है?
मुझे पता नहीं क्या तुम यहाँ पर हो रही है है। ऐसा लगता है कि यह सवाल बिल्कुल संबंधित नहीं है, और 'x = [1, 2] .__ iter __() लिखने का एक जटिल तरीका दिखता है। अगला'। तुम क्या कहना चाहते हो? – aquavitae
अच्छी तरह से। आप एक समारोह के एक नकली क्रीम बनाने के लिए एक रास्ता चाहते हैं। अब आप reponses के आदेश rhe। नहीं? x = ["आपका पहला प्रतिक्रिया", "आपका दूसरा प्रतिक्रिया", "... आदि"] .__ iter __()। अगला समस्या हल करता है। – Nasgar
मुझे पता है कि एक इटरेटर कैसे बनाएं और फ़ंक्शन का मज़ाक उड़ाएं। मेरा सवाल यह था कि प्रत्येक परीक्षण समारोह के लिए नकली को रीसेट करने का एक आसान तरीका है या नहीं। – aquavitae