2009-05-19 114 views
5

我的异常使用单元测试的测试,例如:Python单元测试:我如何测试异常中的参数?

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

和我的代码提出:

raise UnrecognizedAirportError('From') 

效果很好。

如何测试异常中的参数是我所期望的呢?

我想以某种方式断言capturedException.argument == 'From'

我希望这是足够清晰的 - 在此先感谢!

Tal。

回答

11

像这样。

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

你的论点是args,如果你只是继承Exception

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

如果异常类是从 衍生标准根类BaseException, 相关值存在作为 异常实例的属性ARGS。


编辑更大实施例。

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,比我的清洁得多:) – 2009-05-19 15:21:44

1

assertRaises是一个有点简单化,并且不会让你测试引发的异常的细节超越它属于一个特定的类别。为了对异常进行更细粒度的测试,您需要使用try/except/else块来“自行设计”(您可以通过将def assertDetailedRaises方法添加到您自己的unittest测试用例的通用子类中,然后进行测试案例都是继承你的子类而不是unittest的)。