2009-05-19 18 views
5

मैं unittest का उपयोग कर अपवाद के लिए परीक्षण कर रहा हूँ, उदाहरण के लिए:पायथन एकजुट: मैं अपवादों में तर्क का परीक्षण कैसे करूं?

self.assertRaises(UnrecognizedAirportError, func, arg1, arg2) 

और मेरे कोड को जन्म देती है:

raise UnrecognizedAirportError('From') 

कौन सा अच्छी तरह से काम करता है।

मैं कैसे परीक्षण करूं कि अपवाद में तर्क यह है कि मैं यह अपेक्षा करता हूं?

मैं किसी भी तरह से यह कहना चाहता हूं कि capturedException.argument == 'From'

मुझे उम्मीद है कि यह पर्याप्त स्पष्ट है - अग्रिम धन्यवाद!

ताल।

उत्तर

11

इस तरह। अगर आप बस Exception उपवर्ग

>>> try: 
...  raise UnrecognizedAirportError("func","arg1","arg2") 
... except UnrecognizedAirportError, e: 
...  print e.args 
... 
('func', 'arg1', 'arg2') 
>>> 

आपका तर्क, args में हैं।

http://docs.python.org/library/exceptions.html#module-exceptions

देखें अपवाद वर्ग से मानक जड़ वर्ग BaseException, के रूप में अपवाद उदाहरण के आर्ग विशेषता जुड़े मूल्य मौजूद है प्राप्त होता है तो।


संपादित बड़ा उदाहरण।

class TestSomeException(unittest.TestCase): 
    def testRaiseWithArgs(self): 
     try: 
      ... Something that raises the exception ... 
      self.fail("Didn't raise the exception") 
     except UnrecognizedAirportError, e: 
      self.assertEquals("func", e.args[0]) 
      self.assertEquals("arg1", e.args[1]) 
     except Exception, e: 
      self.fail("Raised the wrong exception") 
+0

+1, मेरे मुकाबले ज्यादा क्लीनर :) –

+0

मुझे पता है कि पाइथन-देव पर कुछ बात हुई थी, पकड़े गए अपवाद को वापस करने के लिए जोर से संशोधित करने के लिए कुछ समय था (और यह उल्लेख किया गया था कि दोनों मुड़ और बीजेआर ने ऐसा करने के लिए एकजुट हैक किया)। क्या किसी को किसी भी ढांचे के बारे में पता है जो डिफ़ॉल्ट रूप से इसे कार्यान्वित करता है। पायथन-देव नोट से लिंक करें: http://mail.python.org/pipermail/python-dev/2008-July/081293.html –

1

assertRaises एक सा साधारण है, और उससे आगे यह एक निर्दिष्ट वर्ग से संबंधित आप उठाया अपवाद के विवरण का परीक्षण करते हैं नहीं है। अपवादों के बेहतर अनाज परीक्षण के लिए, आपको try/except/else ब्लॉक के साथ "अपना खुद का रोल" करने की आवश्यकता है (आप इसे एक बार और def assertDetailedRaises विधि में कर सकते हैं जो आप अपने स्वयं के जेनेरिक सबक्लास में जोड़ते हैं, तो परीक्षण करें मामलों में सभी अपने उप-वर्ग के उत्तराधिकारी के बजाय उत्तराधिकारी हैं)।

संबंधित मुद्दे