यूनिट-परीक्षणों को कार्यक्षमता का परीक्षण करना चाहिए और कार्यान्वयन विवरणों के लिए अज्ञेयवादी होने का प्रयास करना चाहिए। Mock.assert_called_with()
एक सुविधाजनक कार्य है, फिर भी AFAIK यह *args
से *args
और **kwargs
से **kwargs
की तुलना करता है। इसलिए:Mock.assert_called_with() agnostic args बनाम kwargs
# class to be mocked during test
class SomeClass():
def func(self,a,b,c=5):
# ...
# code under test
somaclass_instance.func(1,b=2,c=3)
# test code that works
someclass_mock.func.assert_called_with(1,b=2,c=3)
# test code that won't work
someclass_mock.func.assert_called_with(1,2,c=3)
someclass_mock.func.assert_called_with(a=1,b=2,c=3)
वहाँ इतना है कि बारीकियों जो *args
की जहां func
करने के लिए कॉल, जो वास्तव में एक कार्यान्वयन विस्तार है में **kwargs
रूप में इस्तेमाल किया, ध्यान नहीं दिया जाएगा इस सामान्यीकरण करने के लिए एक तरीका है?
मुझे 100% यकीन नहीं है कि मैं आपका प्रश्न समझता हूं, लेकिन आप एक ही फ़ंक्शन कॉल में * args और ** kwargs पास कर सकते हैं, या चूंकि तर्क प्रकार के tuple हैं, और kwargs dicts हैं, हो सकता है कि आप हो एक रैपर फ़ंक्शन लिखने में सक्षम है जो इनपुट को सामान्य करता है जिसे आप सुनिश्चित कर सकते हैं। –
क्या अब तक कोई नकली ढांचा है जो यह करता है? मेरे परीक्षण सिर्फ इसलिए विफल नहीं होना चाहिए क्योंकि किसी ने किसी बिंदु पर किसी कीवर्ड तर्क में स्थितित्मक तर्क बदलने का निर्णय लिया है। हालांकि, यह प्रश्न एकमात्र समय है जिसे मैंने कभी भी इस मुद्दे का उल्लेख किया है। मॉक पहले से ही स्पेस-ऑब्जेक्ट्स का समर्थन करता है, इसलिए यह संभव होना चाहिए? – jan