मेरा मानना है कि यह एक गलत धारणा है जिस तरह से मैं सोच सकता हूं।
उत्पादन-परीक्षण का परीक्षण करने वाला परीक्षण-कोड बिल्कुल समान नहीं है। मैं अजगर में प्रदर्शित करूँगा:
def multiply(a, b):
"""Multiply ``a`` by ``b``"""
return a*b
फिर एक साधारण परीक्षा होगी:
def test_multiply():
assert multiply(4, 5) == 20
दोनों कार्यों की एक समान परिभाषा है लेकिन दोनों बहुत अलग चीजें करते हैं। यहां कोई डुप्लिकेट कोड नहीं है। ;-)
यह भी होता है कि लोग डुप्लिकेट परीक्षण लिखते हैं जो अनिवार्य रूप से प्रति परीक्षण फ़ंक्शन का एक दावा है। यह पागलपन है और मैंने लोगों को ऐसा करते देखा है। यह है बुरा व्यवहार।
def test_multiply_1_and_3():
"""Assert that a multiplication of 1 and 3 is 3."""
assert multiply(1, 3) == 3
def test_multiply_1_and_7():
"""Assert that a multiplication of 1 and 7 is 7."""
assert multiply(1, 7) == 7
def test_multiply_3_and_4():
"""Assert that a multiplication of 3 and 4 is 12."""
assert multiply(3, 4) == 12
कोड की 1000+ प्रभावी लाइनों के लिए ऐसा करने की कल्पना करें। इसके बजाय आप प्रति 'फीचर' आधार पर परीक्षण करते हैं:
def test_multiply_positive():
"""Assert that positive numbers can be multiplied."""
assert multiply(1, 3) == 3
assert multiply(1, 7) == 7
assert multiply(3, 4) == 12
def test_multiply_negative():
"""Assert that negative numbers can be multiplied."""
assert multiply(1, -3) == -3
assert multiply(-1, -7) == 7
assert multiply(-3, 4) == -12
अब जब सुविधाएँ जोड़ी जाती हैं / हटा दी जाती हैं, तो मुझे केवल एक परीक्षण फ़ंक्शन को जोड़ने / हटाने पर विचार करना होगा।
आपने देखा होगा कि मैंने for
लूप नहीं लगाए हैं। ऐसा इसलिए है क्योंकि कुछ चीजों को दोहराना अच्छा है। जब मैंने लूप लगाया होता तो कोड बहुत छोटा होता। लेकिन जब एक जोरदार विफल होता है तो यह अस्पष्ट संदेश को प्रदर्शित करने वाले आउटपुट को बाधित कर सकता है। यदि ऐसा होता है, तो आपके परीक्षण कम उपयोगी होंगे और आपको यह देखने के लिए डिबगर की आवश्यकता होगी कि चीजें कहां गलत हैं।