ইউনিট পরীক্ষার পক্ষে কি এমন পদ্ধতি সম্ভব যে কোনও পদ্ধতি sys.exit () কে কল করে


99

আমার কাছে পাইথন ২.7 পদ্ধতি রয়েছে যা মাঝে মাঝে কল করে

sys.exit(1) 

সঠিক শর্তগুলি পূরণ করার সময় কোডের এই লাইনটি যাচাই করে এমন একটি ইউনিট পরীক্ষা করা কি সম্ভব?


সম্ভাব্য সদৃশ Unittest: ডান SystemExit কোড জাহির
AGK

উত্তর:


156

হ্যাঁ. 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)

 

sys.exit ডকুমেন্টেশন :

পাইথন থেকে প্রস্থান করুন। এটি SystemExitব্যতিক্রম উত্থাপনের মাধ্যমে বাস্তবায়িত হয় ... বহিরাগত স্তরের প্রস্থান প্রয়াসকে থামানো সম্ভব।


4
+1, তা বাদে যদি তিনি যাচাই করতে চান তবে এটি কল করেছে sys.exit(1)(এর বিপরীতে, বলুন sys.exit(0)) আপনার আসলে codeএটি 1 হ'ল দাবি করা দরকার I আমার ধারণা আপনি এটি দিয়ে পারতেন assertRaisesRegexp(SystemExit, '1')?
অবহিত

আমি নিশ্চিত ছিল unittestযে একটি পদ্ধতি ছিল যা আপনাকে ব্যতিক্রম বা এর আর্গুমেন্টগুলিতে চালানোর জন্য একটি ব্যতিক্রম এবং কলযোগ্য প্রকেটটি পাস করতে দেয় , তার প্রথম আর্গের স্ট্রিং উপস্থাপনায় চালিত হওয়ার জন্য কেবলমাত্র একটি রেজেক্স প্যাটার্নের চেয়ে ... তবে আমি অনুমান করি না। আমি কি অন্য কোন পরীক্ষার মডিউল সম্পর্কে চিন্তা করছি?
অবতারিত

4
+1, ত্রুটি কোড যাচাইয়ের জন্য কেবল এটি করা আরও সহজ: self.assertRaisesRegex( SystemExit, '^2$', testMethod ) কম কোড, যথেষ্ট পাঠযোগ্য।
মারেক লেয়ান্ডোভস্কি

4
@ মারেকলিউভান্দোস্কি - টাইপো অবশ্যই হতে হবেself.assertRaisesRegexp
ইভজেন

12

এখানে একটি পরিপূর্ণ কাজ উদাহরণ। পাভেলের দুর্দান্ত উত্তর সত্ত্বেও এটি বের করতে আমার কিছুটা সময় লেগেছে, সুতরাং এটি সহায়ক হবে এই আশায় আমি এখানে এটি অন্তর্ভুক্ত করছি।

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)

4

"ব্যতিক্রমের পরীক্ষার জন্য" পাইথন ইউনিট পরীক্ষার ডকুমেন্টেশন অনুসন্ধানে আপনার প্রশ্নের উত্তর পেয়েছি । আপনার উদাহরণ ব্যবহার করে ইউনিট পরীক্ষাটি নিম্নলিখিতগুলির মতো দেখাবে:

self.assertRaises(SystemExit, your_function, argument 1, argument 2)

আপনার ফাংশন পরীক্ষা করার জন্য প্রয়োজনীয় সমস্ত যুক্তি অন্তর্ভুক্ত মনে রাখবেন।


1

পাভেলের দুর্দান্ত উত্তরের অতিরিক্ত নোট হিসাবে আপনি নির্দিষ্ট পরীক্ষাগুলির পরীক্ষা করতে পারেন যদি সেগুলি আপনি পরীক্ষা করছেন এমন ফাংশনে সরবরাহ করা থাকে। উদাহরণস্বরূপ যদি your_method()নিম্নলিখিত sys.exit("Error")থাকে তবে বিশেষত "ত্রুটি" এর জন্য পরীক্ষা করা সম্ভব হবে:

with self.assertRaises(SystemExit) as cm:
    your_method()
    self.assertEqual(cm.exception, "Error")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.