我使用assertRaises()来验证是否会抛出异常并且没有问题。
我的问题是,有没有办法从assertRaises()获取异常消息?我想通过解析异常消息来断言不同类型的exceptios ...
答案 0 :(得分:2)
我使用以下nose启发的装饰师:
def raises(exception, message):
@decorator
def decorate(func, *args, **kwargs):
name = func.__name__
try:
func(*args, **kwargs)
except exception, e:
if message is not None:
assert_equal(str(e), message)
except:
raise
else:
msg = "%s() did not raise %s" % (name, exception.__name__)
raise AssertionError(msg)
return decorate
所以我可以这样做:
class TestMyThing(TestCase):
@raises(ValueError, "T should not exceed 100, but has value 120")
def test(self):
some_code_that_provoke_exception()
@decorator
来自decorator个包裹。如果你不想出于某种原因引入依赖,你可以手工编写装饰器。
答案 1 :(得分:0)
如果不同的异常消息相当于不同的可测试条件,则它们应该是两个不同的异常。但是,它们可以轻松地从相同的基本异常类继承,因此您的其他异常处理代码不一定需要更改。
答案 2 :(得分:0)
我刚刚想出了解决方案,只需创建一个包装类,并使用它来断言异常。
@staticmethod
def assertRaises(exception, apicall, *args, **kwargs):
try:
apicall(*args, **kwargs)
except exception as e:
return e
finally:
pass;