使用python unittest测试异常的tyring

时间:2017-09-11 11:36:11

标签: python unit-testing exception

我有以下代码:

class cutomTests(unittest.TestCase, moduleName.className):

    def test_input_too_large(self):
      '''className.functionName should fail with large input'''
      self.assertRaises(moduleName.OutOfRangeError, self.functionName(4000)

我得到了以下结果:

======================================================================
ERROR: test_input_too_large (__main__.customTests)
className.functionName should fail with large input
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/user/workspace//ClassNameTests.py", line 37, in test_input_too_large
  self.assertRaises(toRoman.OutOfRangeError, self.answer(4000))
  File "/home/user/workspace/moduleName.py", line 47, in answer
  raise OutOfRangeError()
OutOfRangeError

所以结果应该是正确的,因为引发了异常???

2 个答案:

答案 0 :(得分:2)

你需要让assertRaises调用函数而不是自己动手:

self.assertRaises(OutOfRangeError, self.functionName, 4000)

现在,您正在调用 self.functionName并将结果传递给assertRaises。显然,如果self.functionName提出异常,它就不会被assertRaises抓住,因为assertRaises此时尚未被调用: - )。

请注意,从python2.7开始,assertRaises可以用作上下文管理器,这样更方便:

with self.assertRaises(OutOfRangeError):
    self.functionName(4000)

答案 1 :(得分:1)

没有。您应该使用assertRaises方法作为上下文管理器。

with self.assertRaises(moduleName.OutOfRangeError):
    self.functionName(4000)

另一种用法是将函数和参数作为下一个参数传递。然而,它不是那么漂亮:

self.assertRaises(moduleName.OutOfRangeError, self.functionName, 4000)