সম্পাদনা: আরও ভাল উদাহরণে পরিবর্তন করা হয়েছে এবং কেন এটি আসল সমস্যা তা স্পষ্ট করে জানিয়েছে।
আমি পাইথনে ইউনিট পরীক্ষাগুলি লিখতে চাই যা দৃ .়তা ব্যর্থ হলে কার্যকর করা চালিয়ে যায়, যাতে আমি একক পরীক্ষায় একাধিক ব্যর্থতা দেখতে পারি। উদাহরণ স্বরূপ:
class Car(object):
def __init__(self, make, model):
self.make = make
self.model = make # Copy and paste error: should be model.
self.has_seats = True
self.wheel_count = 3 # Typo: should be 4.
class CarTest(unittest.TestCase):
def test_init(self):
make = "Ford"
model = "Model T"
car = Car(make=make, model=model)
self.assertEqual(car.make, make)
self.assertEqual(car.model, model) # Failure!
self.assertTrue(car.has_seats)
self.assertEqual(car.wheel_count, 4) # Failure!
এখানে, পরীক্ষার উদ্দেশ্যটি নিশ্চিত করা হয় যে গাড়ি এর __init__
ক্ষেত্রগুলি সঠিকভাবে সেট করেছে। আমি এটিকে চারটি পদ্ধতিতে বিভক্ত করতে পারি (এবং এটি প্রায়শই দুর্দান্ত ধারণা) তবে এই ক্ষেত্রে আমি মনে করি এটি একক পদ্ধতি হিসাবে রাখার চেয়ে এটি আরও পঠনযোগ্য যা কোনও একক ধারণা পরীক্ষা করে ("অবজেক্টটি সঠিকভাবে আরম্ভ করা হয়")।
যদি আমরা ধরে নিই যে পদ্ধতিটি ভেঙে না দেওয়া ভাল তবে এখানে আমার একটি নতুন সমস্যা আছে: আমি একবারে সমস্ত ত্রুটি দেখতে পাচ্ছি না। আমি যখন model
ত্রুটিটি ঠিক করি এবং পরীক্ষাটি আবার চালিত করি, তখন wheel_count
ত্রুটিটি উপস্থিত হয়। আমি প্রথম পরীক্ষাটি চালানোর সময় উভয় ত্রুটি দেখতে আমার সময় সাশ্রয় করবে।
তুলনার জন্য, গুগলের সি ++ ইউনিট পরীক্ষার কাঠামো অ-মারাত্মক বক্তব্য এবং মারাত্মক বক্তব্যগুলির মধ্যে পার্থক্য করে :EXPECT_*
ASSERT_*
যুক্তিগুলি জোড়ায় আসে যা একই জিনিস পরীক্ষা করে তবে বর্তমান ফাংশনে বিভিন্ন প্রভাব ফেলে। ASSERT_ * সংস্করণগুলি ব্যর্থ হলে মারাত্মক ব্যর্থতা তৈরি করে এবং বর্তমান ফাংশনটি বাতিল করে দেয়। EXPECT_ * সংস্করণগুলি ননফ্যাটাল ব্যর্থতা উত্পন্ন করে, যা বর্তমান ফাংশনটি বাতিল করে না। সাধারণত EXPECT_ * পছন্দ করা হয়, কারণ তারা পরীক্ষায় একাধিক ব্যর্থতা রিপোর্ট করার অনুমতি দেয়। যাইহোক, আপনার প্রশ্নের জবাব যদি ব্যর্থ হয় তবে এটি চালিয়ে যাওয়া যদি অর্থবোধ না করে তবে আপনার ASSERT_ * ব্যবহার করা উচিত।
EXPECT_*
পাইথন-এর মতো আচরণ করার কোনও উপায় আছে কি unittest
? যদি না থাকে unittest
, তবে অন্য পাইথন ইউনিট পরীক্ষার কাঠামো রয়েছে যা এই আচরণকে সমর্থন করে?
ঘটনাচক্রে, আমি কৌতূহলী ছিলাম যে কতগুলি বাস্তব-জীবনের পরীক্ষাগুলি অ-মারাত্মক বক্তব্যগুলি থেকে উপকৃত হতে পারে, তাই আমি কয়েকটি কোড উদাহরণগুলিতে (গুগল কোড অনুসন্ধান, আরআইপি পরিবর্তে সার্চকোড ব্যবহার করতে 2014-08-19 সম্পাদিত) তাকালাম। প্রথম পৃষ্ঠা থেকে এলোমেলোভাবে নির্বাচিত ফলাফলগুলির মধ্যে 10 টিতে একই পরীক্ষা পদ্ধতিতে একাধিক স্বতন্ত্র জোর দিয়েছিল এমন সমস্ত পরীক্ষা রয়েছে। অ-মারাত্মক বক্তব্যগুলি থেকে সকলেই উপকৃত হবেন।