我在我的单元测试中使用 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 来做同样的事情,这是一种更紧凑的方式。

谢谢。

最佳答案

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

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

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

10-06 10:34