मैं अपने आप को इकाई परीक्षण सर्वोत्तम प्रथाओं में एक बहुत प्रशिक्षित करने के लिए हाल ही में की कोशिश की। इसमें से अधिकांश सही समझ में आता है, लेकिन ऐसा कुछ ऐसा होता है जिसे अक्सर अनदेखा किया जाता है और/या बुरी तरह समझाया जाता है: एक यूनिट-टेस्ट सजाए गए कार्यों को कैसे किया जाना चाहिए?सजाए गए कार्यों को यूनिट-टेस्ट कैसे करें?
def stringify(func):
@wraps(func)
def wrapper(*args):
return str(func(*args))
return wrapper
class A(object):
@stringify
def add_numbers(self, a, b):
"""
Returns the sum of `a` and `b` as a string.
"""
return a + b
मैं स्पष्ट रूप से निम्नलिखित परीक्षणों लिख सकते हैं::
def test_stringify():
@stringify
def func(x):
return x
assert func(42) == "42"
def test_A_add_numbers():
instance = MagicMock(spec=A)
result = A.add_numbers.__wrapped__(instance, 3, 7)
assert result == 10
यह मैं हूँ 100% कवरेज देता है:
की मैं इस कोड है मान लेते हैं मुझे पता है कि किसी भी समारोह है कि stringify()
के साथ सजाया जाता है एक स्ट्रिंग के रूप में अपना परिणाम प्राप्त करता है, और मुझे पता है कि अनावृत A.add_numbers()
फ़ंक्शन इसके तर्कों का योग देता है। तो पारगमनशीलता के अनुसार, A.add_numbers()
के सजाए गए संस्करण को एक स्ट्रिंग के रूप में अपने तर्क का योग वापस करना होगा। सब अच्छा लगता है!
हालांकि मैं इस से पूरी तरह से संतुष्ट नहीं हूं: मेरे परीक्षण, जैसा कि मैंने उन्हें लिखा था, अभी भी पास हो सकता है अगर मैं एक और सजावट का उपयोग करना चाहता था (जो कुछ और करता है, तो str
पर कास्टिंग करने के बजाय परिणाम को गुणा करें) । मेरा फ़ंक्शन A.add_numbers
अब और सही नहीं होगा, फिर भी परीक्षण अभी भी पास होंगे। भयानक नहीं
मैं A.add_numbers()
का सजाया संस्करण का परीक्षण कर सकता है, लेकिन फिर मैं चीजों overtest के बाद से मेरी डेकोरेटर पहले से ही इकाई परीक्षण है।
यह लगता है जैसे मैं कुछ यहाँ याद कर रहा हूँ। यूनिट-टेस्ट सजाए गए कार्यों के लिए एक अच्छी रणनीति क्या है?
मुझे विश्वास है कि आप मेरे प्रश्न को थोड़ा तेज़ी से पढ़ते हैं। मैं कार्यात्मक परीक्षण लिखना नहीं चाहता लेकिन यूनिट-टेस्ट। – ereOn
तथ्य यह है कि 'add_numbers' वास्तव में 'स्ट्रिंगफ़ाई' द्वारा सजाए गए एक और फ़ंक्शन एक कार्यान्वयन विवरण है। परीक्षण करें कि 'add_numbers' इरादे के अनुसार काम करता है, और इससे कोई फर्क नहीं पड़ता कि आप एक अलग सजावट (या बिल्कुल सजावट नहीं) का उपयोग करते हैं। – chepner
@chepner: कार्यान्वयन विवरणों का परीक्षण करने के लिए यूनिट-टेस्ट ठीक हैं। फिर, अगर हम कार्यात्मक/एकीकरण परीक्षणों के बारे में बात कर रहे थे तो मैं सहमत होगा। यह सिर्फ ऑफ-विषय है। – ereOn