将errno与Unit Tes中的assertRaises一起使用

2024-10-08 18:30:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在单元测试中使用assertRaises来测试特定异常的引发。在

assertRaises(IOError, testToRun, passedValues)

虽然我需要捕获的一些异常有特定的错误号(errno),所以我不想收集基本异常,而是想捕获与该异常相关的特定错误号。类似这样的事情,虽然显然行不通:)

^{pr2}$

当我想捕获特定编号的异常时,我已经使用:-在

try:
    testToRun(passedValues)
except IOError, e:
    if e.errno == 2:
        pass
    else:
        raise

我确定这不是完美的,但它是有效的,但我想知道是否有可能使用资产加薪来做同样的事情是一个更紧凑的方式。在

谢谢。在


Tags: if错误pass单元测试事情else编号try
2条回答

您还可以使用当前代码创建一个新的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方法一样使用它:

^{pr2}$

您还可以使用contextlib.contextmanager很容易地将其转换为上下文管理器

从2.7开始,可以将^{}与上下文管理器一起使用:

with self.assertRaises(SomeException) as cm:
    do_something()

the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)

相关问题 更多 >

    热门问题