assertRaises in python unit-test not catching the exception
本问题已经有最佳答案,请猛点这里访问。
有人能告诉我为什么下面的单元测试在测试出错,而不是用断言引发捕获它成功了吗?我想我用的是正确的程序和语法,但是ValueError不会被捕获。
我在Linux设备上使用的是python 2.7.5。
这是密码……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import unittest class IsOne(object): def __init__(self): pass def is_one(self, i): if (i != 1): raise ValueError class IsOne_test(unittest.TestCase): def setUp(self): self.isone = IsOne() def test_good(self): self.isone.is_one(1) self.assertTrue(True) def test_bad(self): self.assertRaises(ValueError, self.isone.is_one(2)) if __name__ =="__main__": unittest.main() |
这是单元测试的输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ====================================================================== ERROR: test_bad (__main__.IsOne_test) ---------------------------------------------------------------------- Traceback (most recent call last): File"test/raises.py", line 20, in test_bad self.assertRaises(ValueError, self.isone.is_one(2)) File"test/raises.py", line 8, in is_one raise ValueError ValueError ---------------------------------------------------------------------- Ran 2 tests in 0.008s FAILED (errors=1) |
UnitTest的断言引发需要可调用和参数,因此在您的情况下,您可以这样调用它:
1 | self.assertRaises(ValueError, self.isone.is_one, 2) |
如果您愿意,从python2.7开始,还可以将其用作上下文管理器,如:
1 2 | with self.assertRaises(ValueError): self.isone.is_one(2) |