আপনার উদাহরণ গ্রহণ করা (কিছুটা রিফ্যাক্টরিং সহ),
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
প্রথম দৃser়তার সাথে প্রকৃত মান অর্জন করা স্ব-ব্যাখ্যামূলক: আপনি জানেন যে পদ্ধতিটি একটি বড় নির্ভুলতার সাথে মোকাবিলা করার আশা করা হয়েছিল , তবে বাস্তবে, এটি ব্যর্থ হয়।
খুব একই কারণে, নিম্নলিখিত দুটি বক্তব্য কিছু ভাষায় বোধ করতে পারে:
// 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?
কেউ সত্যিই জানে :)