আপনি সংজ্ঞায়িত করতে assertNotRaisesমূল বাস্তবায়ন 90% সম্পর্কে পুনঃব্যবহার দ্বারা assertRaisesমধ্যে unittestমডিউল। এই পদ্ধতির সাথে, আপনি একটি assertNotRaisesবিপরীত ব্যর্থতা শর্ত বাদে একই পদ্ধতিতে আচরণ করেন এমন একটি পদ্ধতি শেষ করেন assertRaises।
টিএলডিআর এবং লাইভ ডেমো
এতে আশ্চর্যজনকভাবে কোনও assertNotRaisesপদ্ধতি যুক্ত করা সহজ হয়ে গেছে unittest.TestCase(কোডটি যেমন করছিল ঠিক তেমন উত্তরটি লিখতে আমাকে প্রায় 4 বার সময় লেগেছে)। এখানে কর্মের পদ্ধতিটির একটি লাইভ ডেমো রয়েছেassertNotRaises । শুধু মতassertRaises , হয় আপনি একটি callable এবং args পাস করতে পারেন assertNotRaises, অথবা আপনি একটি এটি ব্যবহার করতে পারেন withবিবৃতি। লাইভ ডেমোতে একটি পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে যা এটি দেখায় যে এটি assertNotRaisesকাজ করে।
বিস্তারিত
বাস্তবায়ন assertRaisesমধ্যে unittestমোটামুটি জটিল কিন্তু চালাক subclassing একটি সামান্য বিট সঙ্গে আপনি ওভাররাইড করতে ও তার ব্যর্থতা শর্ত বিপরীত পারবেন না।
assertRaisesএকটি স্বল্প পদ্ধতি যা মূলত কেবল unittest.case._AssertRaisesContextশ্রেণীর একটি উদাহরণ তৈরি করে এবং এটি প্রদান করে ( unittest.caseমডিউলে এটির সংজ্ঞা দেখুন )। _AssertNotRaisesContextসাবক্লাসিং _AssertRaisesContextএবং এর __exit__পদ্ধতিটি ওভাররাইড করে আপনি নিজের শ্রেণীর সংজ্ঞা দিতে পারেন :
import traceback
from unittest.case import _AssertRaisesContext
class _AssertNotRaisesContext(_AssertRaisesContext):
def __exit__(self, exc_type, exc_value, tb):
if exc_type is not None:
self.exception = exc_value.with_traceback(None)
try:
exc_name = self.expected.__name__
except AttributeError:
exc_name = str(self.expected)
if self.obj_name:
self._raiseFailure("{} raised by {}".format(exc_name,
self.obj_name))
else:
self._raiseFailure("{} raised".format(exc_name))
else:
traceback.clear_frames(tb)
return True
সাধারণত আপনি পরীক্ষার কেস ক্লাসগুলি উত্তরাধিকার সূত্রে প্রাপ্ত করে সংজ্ঞায়িত করেন TestCase। পরিবর্তে আপনি যদি একটি সাবক্লাস থেকে উত্তরাধিকারী হন MyTestCase:
class MyTestCase(unittest.TestCase):
def assertNotRaises(self, expected_exception, *args, **kwargs):
context = _AssertNotRaisesContext(expected_exception, self)
try:
return context.handle('assertNotRaises', args, kwargs)
finally:
context = None
আপনার পরীক্ষার সমস্ত ক্ষেত্রে এখন তাদের কাছে assertNotRaisesপদ্ধতি উপলব্ধ রয়েছে।