मेरे पास एक अजगर 2.7 विधि है जो कभी-कभी कॉल करती है
sys.exit(1)
क्या एक इकाई परीक्षण करना संभव है जो सही परिस्थितियों को पूरा करने पर कोड की इस लाइन को सत्यापित करता है?
मेरे पास एक अजगर 2.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. मुझे लगता है कि आप ऐसा कर सकते हैं assertRaisesRegexp(SystemExit, '1')?
unittestविधि थी जो आपको अपवाद या इसके पुर्जों पर चलने के लिए एक अपवाद योग्य प्रस्ताव पारित करने की अनुमति देती है , बजाय इसके पहले arg के स्ट्रिंग प्रतिनिधित्व पर चलाने के लिए एक रेगेक्स पैटर्न के बजाय ... लेकिन मुझे नहीं लगता। क्या मैं कुछ अन्य परीक्षण मॉड्यूल के बारे में सोच रहा हूं?
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")