আমার কাছে পাইথন ২.7 পদ্ধতি রয়েছে যা মাঝে মাঝে কল করে
sys.exit(1)
সঠিক শর্তগুলি পূরণ করার সময় কোডের এই লাইনটি যাচাই করে এমন একটি ইউনিট পরীক্ষা করা কি সম্ভব?
আমার কাছে পাইথন ২.7 পদ্ধতি রয়েছে যা মাঝে মাঝে কল করে
sys.exit(1)
সঠিক শর্তগুলি পূরণ করার সময় কোডের এই লাইনটি যাচাই করে এমন একটি ইউনিট পরীক্ষা করা কি সম্ভব?
উত্তর:
হ্যাঁ. sys.exit
উত্থাপিত হয় SystemExit
, যাতে আপনি এটি দিয়ে পরীক্ষা করতে পারেন assertRaises
:
with self.assertRaises(SystemExit):
your_method()
এর দৃষ্টান্ত SystemExit
একটি বৈশিষ্ট্য আছে code
যা প্রস্তাবিত প্রস্থান অবস্থা সেট করা থাকে, এবং প্রসঙ্গ ম্যানেজার দ্বারা ফিরে assertRaises
ধরা ব্যতিক্রম দৃষ্টান্ত রয়েছে যেমন exception
, তাই প্রস্থান স্থিতি পরীক্ষা সহজ:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception.code, 1)
পাইথন থেকে প্রস্থান করুন। এটি
SystemExit
ব্যতিক্রম উত্থাপনের মাধ্যমে বাস্তবায়িত হয় ... বহিরাগত স্তরের প্রস্থান প্রয়াসকে থামানো সম্ভব।
sys.exit(1)
(এর বিপরীতে, বলুন sys.exit(0)
) আপনার আসলে code
এটি 1 হ'ল দাবি করা দরকার I আমার ধারণা আপনি এটি দিয়ে পারতেন assertRaisesRegexp(SystemExit, '1')
?
unittest
যে একটি পদ্ধতি ছিল যা আপনাকে ব্যতিক্রম বা এর আর্গুমেন্টগুলিতে চালানোর জন্য একটি ব্যতিক্রম এবং কলযোগ্য প্রকেটটি পাস করতে দেয় , তার প্রথম আর্গের স্ট্রিং উপস্থাপনায় চালিত হওয়ার জন্য কেবলমাত্র একটি রেজেক্স প্যাটার্নের চেয়ে ... তবে আমি অনুমান করি না। আমি কি অন্য কোন পরীক্ষার মডিউল সম্পর্কে চিন্তা করছি?
self.assertRaisesRegex( SystemExit, '^2$', testMethod )
কম কোড, যথেষ্ট পাঠযোগ্য।
self.assertRaisesRegexp
এখানে একটি পরিপূর্ণ কাজ উদাহরণ। পাভেলের দুর্দান্ত উত্তর সত্ত্বেও এটি বের করতে আমার কিছুটা সময় লেগেছে, সুতরাং এটি সহায়ক হবে এই আশায় আমি এখানে এটি অন্তর্ভুক্ত করছি।
import unittest
from glf.logtype.grinder.mapping_reader import MapReader
INCOMPLETE_MAPPING_FILE="test/data/incomplete.http.mapping"
class TestMapReader(unittest.TestCase):
def test_get_tx_names_incomplete_mapping_file(self):
map_reader = MapReader()
with self.assertRaises(SystemExit) as cm:
tx_names = map_reader.get_tx_names(INCOMPLETE_MAPPING_FILE)
self.assertEqual(cm.exception.code, 1)
"ব্যতিক্রমের পরীক্ষার জন্য" পাইথন ইউনিট পরীক্ষার ডকুমেন্টেশন অনুসন্ধানে আপনার প্রশ্নের উত্তর পেয়েছি । আপনার উদাহরণ ব্যবহার করে ইউনিট পরীক্ষাটি নিম্নলিখিতগুলির মতো দেখাবে:
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
আপনার ফাংশন পরীক্ষা করার জন্য প্রয়োজনীয় সমস্ত যুক্তি অন্তর্ভুক্ত মনে রাখবেন।
পাভেলের দুর্দান্ত উত্তরের অতিরিক্ত নোট হিসাবে আপনি নির্দিষ্ট পরীক্ষাগুলির পরীক্ষা করতে পারেন যদি সেগুলি আপনি পরীক্ষা করছেন এমন ফাংশনে সরবরাহ করা থাকে। উদাহরণস্বরূপ যদি your_method()
নিম্নলিখিত sys.exit("Error")
থাকে তবে বিশেষত "ত্রুটি" এর জন্য পরীক্ষা করা সম্ভব হবে:
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception, "Error")