use*_*653 20 python unit-testing assertraises
有人可以告诉我为什么下面的单元测试在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()
Run Code Online (Sandbox Code Playgroud)
这是单元测试的输出:
======================================================================
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)
Run Code Online (Sandbox Code Playgroud)
Ger*_*rat 46
Unittest的assertRaises需要一个可调用的参数,所以在你的情况下,你会称之为:
self.assertRaises(ValueError, self.isone.is_one, 2)
Run Code Online (Sandbox Code Playgroud)
如果您愿意,从Python2.7开始,您还可以将其用作上下文管理器,如:
with self.assertRaises(ValueError):
self.isone.is_one(2)
Run Code Online (Sandbox Code Playgroud)