使用Python 3.5,为什么运行时会通过以下所有测试?由于调用Exception
时未提出div
,assertRaises()
如何抱怨?
根据assertRaises()
的文档:"如果没有引发异常,则会失败"。
有人能帮助我吗?
..
----------------------------------------------------------------------
Ran 2 tests in 0.002s
def div(self, x, y):
if y == 0:
raise Exception("Division by zero")
return x / y
class MyTest(unittest.TestCase):
def test1(self):
with self.assertRaises(Exception) as cm:
self.div(2, 1)
def test2(self):
self.assertRaises(Exception, div, 2, 1)
答案 0 :(得分:5)
因为您使用错误的签名调用了div
并且在调用div
之前引发了异常(div
的实际主体未执行,因此在执行之前引发了异常)。
要获得更清晰的图片,了解正在进行的操作,尝试从div
引发ZeroDivisionError并在您的测试用例中将assertRaises(Exception, ...
替换为assertRaises(ZeroDivisionError, ...
答案 1 :(得分:2)
当您致电self.div()
时,会引发异常 ,因为您已在div
类之外定义了MyTest
方法。
这也是为什么在测试中验证异常消息的好主意:
with self.assertRaises(Exception) as exc:
self.div(2, 1)
self.assertEqual("Division by zero", str(exc.exception))
答案 2 :(得分:0)
您还可以使用:
self.assertRaises(Exception, lambda: div(2, 0))