चलें कहते हैं कि तुम awesome.py और उस में नाम के एक मॉड्यूल है, तो आप के लिए किया था:
import time
class SomeProductionProcess(CustomCachedSingleTon):
def loaddata(self):
time.sleep(30) # simulating a long running process
return 2
फिर अपने unittest जहां नकली loaddata
ऐसा दिखाई दे सकता:
import unittest
import awesome # your application module
class TestSomeProductionProcess(unittest.TestCase):
"""Example of direct monkey patching"""
def test_loaddata(self):
some_prod_proc = awesome.SomeProductionProcess()
some_prod_proc.loaddata = lambda x: 2 # will return 2 every time called
output = some_prod_proc.loaddata()
expected = 2
self.assertEqual(output, expected)
या यह इस तरह दिख सकता है:
import unittest
from mock import patch
import awesome # your application module
class TestSomeProductionProcess(unittest.TestCase):
"""Example of using the mock.patch function"""
@patch.object(awesome.SomeProductionProcess, 'loaddata')
def test_loaddata(self, fake_loaddata):
fake_loaddata.return_value = 2
some_prod_proc = awesome.SomeProductionProcess()
output = some_prod_proc.loaddata()
expected = 2
self.assertEqual(output, expected)
अब जब आप अपना परीक्षण चलाते हैं, loaddata
उन परीक्षण मामलों के लिए 30 सेकंड नहीं लेते हैं।
कृपया ध्यान दें कि loaddata() एक @classmethod है। इसके अलावा मैं इस श्रेणी में किसी अन्य विधि का परीक्षण करने में सक्षम होने के लिए कस्टम लोडडेटा() की आपूर्ति करना चाहता हूं। – user4654
'मॉक विधि' प्रश्न के मुताबिक अधिक सही होगा, क्योंकि जब आप 'क्लास विधि' कहते हैं तो नकली 'क्लासमेथ' का अर्थ होता है। एक विधि हमेशा कक्षा के उदाहरण का हिस्सा होती है और कक्षा वर्ग कक्षा का हिस्सा होता है। इसे सजावटी @classmethod के साथ सही परिवर्तन विधि बनाने और पैरामीटर cls जोड़ने के लिए। – msudder