अपना उदाहरण लेते हुए (थोड़ा सा प्रतिशोध के साथ),
assert(a + b, math.add(a, b));
इससे मदद नहीं मिलती:
- समझें कि
math.add
आंतरिक रूप से कैसे व्यवहार किया जाता है,
- जानते हैं कि किन मामलों के साथ क्या होगा।
यह कहना बहुत सुंदर है:
- आप को पता है कि विधि करता चाहते हैं, जाने के लिए और स्रोत कोड की लाइनों के सैकड़ों देख अपने आप को (क्योंकि हाँ,
math.add
कर सकते हैं एलओसी के सैकड़ों शामिल, नीचे देखें)।
- मैं यह जानने की जहमत नहीं उठाता कि विधि सही ढंग से काम करती है या नहीं। यह ठीक है अगर मैं उम्मीद और वास्तविक मूल्य दोनों से अलग हूं जो मैंने वास्तव में उम्मीद की थी ।
इसका मतलब यह भी है कि आपको परीक्षण नहीं जोड़ना है:
assert(3, math.add(1, 2));
assert(4, math.add(2, 2));
वे न तो मदद करते हैं, न ही कम से कम, एक बार जब आपने पहला दावा किया, तो दूसरा उपयोगी नहीं है।
इसके बजाय, इसके बारे में:
const numeric Pi = 3.1415926535897932384626433832795;
const numeric Expected = 4.1415926535897932384626433832795;
assert(Expected, math.add(Pi, 1),
"Adding an integer to a long numeric doesn't give a long numeric result.");
assert(Expected, math.add(1, Pi),
"Adding a long numeric to an integer doesn't give a long numeric result.");
यह आत्म-व्याख्यात्मक है और आपके लिए और बाद में स्रोत कोड बनाए रखने वाले व्यक्ति के लिए दोनों के लिए उपयोगी है। कल्पना करें कि यह व्यक्ति math.add
कोड को सरल बनाने और प्रदर्शन को अनुकूलित करने के लिए एक मामूली संशोधन करता है , और परीक्षा परिणाम को देखता है जैसे:
Test TestNumeric() failed on assertion 2, line 5: Adding a long numeric to an
integer doesn't give a long numeric result.
Expected value: 4.1415926535897932384626433832795
Actual value: 4
यह व्यक्ति तुरंत समझ जाएगा कि नया संशोधित तरीका तर्कों के क्रम पर निर्भर करता है: यदि पहला तर्क एक पूर्णांक है और दूसरा एक लंबा सांख्यिक है, तो परिणाम पूर्णांक होगा, जबकि एक लंबा अंक अपेक्षित था।
उसी तरह, 4.141592
पहले दावे पर वास्तविक मूल्य प्राप्त करना स्वयं-व्याख्यात्मक है: आप जानते हैं कि विधि एक बड़ी सटीकता से निपटने की उम्मीद है , लेकिन वास्तव में, यह विफल रहता है।
एक ही कारण के लिए, निम्नलिखित दो दावे कुछ भाषाओं में समझ सकते हैं:
// We don't expect a concatenation. `math` library is not intended for this.
assert(0, math.add("Hello", "World"));
// We expect the method to convert every string as if it was a decimal.
assert(5, math.add("0x2F", 5));
इसके अलावा, किस बारे में:
assert(numeric.Infinity, math.add(numeric.Infinity, 1));
आत्म-व्याख्यात्मक भी: आप चाहते हैं कि आपकी विधि अनन्तता से सही तरीके से निपटने में सक्षम हो। जा रहे हैं अनंत से परे या एक अपवाद फेंक एक अपेक्षित व्यवहार नहीं है।
या हो सकता है, आपकी भाषा के आधार पर, यह अधिक समझ में आएगा?
/**
* Ensures that when adding numbers which exceed the maximum value, the method
* fails with OverflowException, instead of restarting at numeric.Minimum + 1.
*/
TestOverflow()
{
UnitTest.ExpectException(ofType(OverflowException));
numeric result = math.add(numeric.Maximum, 1));
UnitTest.Fail("The tested code succeeded, while an OverflowException was
expected.");
}
How does unit testing work?
कोई भी वास्तव में जानता है :)