assertrai在python单元测试中没有捕获异常



谁能告诉我为什么下面的单元测试失败了test_bad中的ValueError,而不是用assertRaises捕获它和成功吗?我想我用的程序和语法是正确的,但是ValueError没有被捕获

我在linux上使用Python 2.7.5。

代码如下:

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()

,下面是单元测试的输出:

======================================================================
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的assertRaises接受一个可调用对象和参数,所以在您的示例中,您可以这样调用它:

self.assertRaises(ValueError, self.isone.is_one, 2)

如果您愿意,从Python2.7开始,您还可以将其用作上下文管理器,如:

with self.assertRaises(ValueError):
    self.isone.is_one(2)

相关内容

  • 没有找到相关文章

最新更新