/ माइट्स का उपयोग करके पायथन यूनिट परीक्षण कार्य - अजगर, यूनिट-परीक्षण, मॉकिंग

पाइथन यूनिट परीक्षण फ़ॉक्स का उपयोग करके कार्य करता है - पायथन, यूनिट-परीक्षण, मॉकिंग

मैं अजगर के विकास के लिए काफी नया हूं और मुझे यकीन नहीं है कि यूनिट परीक्षण के लिए एक समारोह में नकली इंजेक्शन लगाने का सबसे अच्छा तरीका क्या होगा।

मेरा एक फंक्शन है जो दिखता है:

import exampleModule

def func():
ls = createList()
exampleModule.send(ls)

उपरोक्त कोड में मैं मजाक करना चाहता हूं exampleModule.send तरीका।

क्या मुझे फ़ंक्शन के तर्क के रूप में विधि पास करनी चाहिए? पसंद:

def func(invokeMethod):
ls = createList()
invokeMethod(ls)

और यूनिट टेस्ट में मैं मॉक पास कर सकता हूं। लेकिन मैं नहीं चाहता कि आह्वानकर्ता आह्वान विधि निर्दिष्ट करे।

इसे करने का सही तरीका क्या है?

उत्तर:

जवाब के लिए 2 № 1

आप उपयोग कर सकते हैं दिखावटी माइकल फॉर्ड द्वारा पुस्तकालय, जो कि पाइथन 3 का हिस्सा है। यह इस तरह के मॉकिंग को बहुत सुविधाजनक बनाता है। इसे करने का एक तरीका यह होगा:

>>> from mock import patch
>>> import exampleModule
>>>
>>> def func():
...     ls = []
...     exampleModule.send(ls)
...
>>> with patch("exampleModule.send") as send:
...     func()
...     assert send.called

यहां हम इसे एक संदर्भ प्रबंधक के रूप में उपयोग करते हैं। लेकिन तुम भी उपयोग ca patch एक सज्जाकार के रूप में। लेकिन उपयोग करने के और भी तरीके हैं mock और यह शायद आपकी सभी जरूरतों को मॉकिंग / स्टबिंग में पूरा करेगा।


उत्तर № 2 के लिए 1

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

यह दृष्टिकोण मूल रूप से आपको रास्ता दिखाता है।

class Foo
def thing_to_mock():
really_expensive_stuff()

def thing_to_test():
i = 1 + 2
thing_to_mock()
return i

class FooTest
def testingThingToTest():
def mocker():
pass
toTest = Foo()
toTest.thing_to_mock = mocker
# assert here

वैकल्पिक रूप से, पायथन 3.3 में आप उपयोग कर सकते हैं अंतर्निहित मॉकिंग समर्थन.