【发布时间】:2010-04-22 15:57:03
【问题描述】:
我使用了assertRaises()来验证会有异常抛出,这个没有问题。
我的问题是,有没有办法从 assertRaises() 获取异常消息?我也想通过解析异常消息来断言不同类型的异常。
【问题讨论】:
标签: django unit-testing
我使用了assertRaises()来验证会有异常抛出,这个没有问题。
我的问题是,有没有办法从 assertRaises() 获取异常消息?我也想通过解析异常消息来断言不同类型的异常。
【问题讨论】:
标签: django unit-testing
我使用以下装饰器,灵感来自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 包。如果出于某种原因不想引入依赖项,可以手动编写装饰器。
【讨论】:
如果不同的异常消息构成不同的可测试条件,它们可能应该是两个不同的异常。但是,它们可以轻松地从相同的异常基类继承,因此您的其他异常处理代码不一定需要更改。
【讨论】:
我只是想出了解决方案,只是创建一个包装类,并使用它来断言异常。
@staticmethod
def assertRaises(exception, apicall, *args, **kwargs):
try:
apicall(*args, **kwargs)
except exception as e:
return e
finally:
pass;
【讨论】: