我在单元测试中使用assertRaises来测试特定异常的产生。
assertRaises(IOError, testToRun, passedValues)
虽然我需要捕获的一些异常具有特定的错误号(errno),因此我不想收集基本异常,而是想捕获与该异常相关的特定错误号。像这样的东西,虽然它显然不起作用:)。
assertRaises(IOError.errno(2), testToRun, passedValue)
当我想要捕获我一直在使用的具体编号的例外时,要解决这个问题: -
try:
testToRun(passedValues)
except IOError, e:
if e.errno == 2:
pass
else:
raise
我确定它并不完美,但它确实有效,但是想知道是否可以使用assertRaises做同样的事情是一种更紧凑的方式。
感谢。
答案 0 :(得分:4)
自2.7以来,可以将assertRaises
与上下文管理器一起使用:
with self.assertRaises(SomeException) as cm:
do_something()
the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)
答案 1 :(得分:-1)
您还可以使用当前代码创建一个新的TestCase函数:
def assertRaisesErrNo(self, exc, errno, f, *args, **kwargs):
try:
self.assertRaises(exc, f, *args, **kwargs)
except IOError, e:
if e.errno == errno:
pass
else:
raise
unittest.TestCase.assertRaisesErrNo = assertRaisesErrNo
然后像任何其他assert
方法一样使用它:
class TestSomething(unittest.TestCase):
def test_somthing(self):
self.assertRaisesErrNo(IOError, 2, myfunction)
轻松将其转换为上下文管理器