আপনি সংজ্ঞায়িত করতে 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
পদ্ধতি উপলব্ধ রয়েছে।