我有以下代码:
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
所以结果应该是正确的,因为引发了异常???
答案 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)