python单元测试中的assertRaises没有捕获异常[重复]
Posted
技术标签:
【中文标题】python单元测试中的assertRaises没有捕获异常[重复]【英文标题】:assertRaises in python unit-test not catching the exception [duplicate] 【发布时间】:2014-09-22 17:03:33 【问题描述】:谁能告诉我为什么下面的单元测试在 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)
【问题讨论】:
【参考方案1】:Unittest 的 assertRaises 接受一个可调用对象和参数,所以在你的情况下,你可以这样称呼它:
self.assertRaises(ValueError, self.isone.is_one, 2)
如果您愿意,从 Python2.7 开始,您还可以将其用作上下文管理器,例如:
with self.assertRaises(ValueError):
self.isone.is_one(2)
【讨论】:
以上是关于python单元测试中的assertRaises没有捕获异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章
用 Python 进行测试 - 如何在使用 unittest 的测试中使用 assertRaises? [复制]