我想测试如果某些函数不会抛出任何异常,使用unittest模块。 这可能吗?我只知道assertRaises方法,但这只是测试抛出的异常,而None参数不适用于异常类型参数...如何使用Python unittest assertRaises来测试该函数不会抛出任何异常?
任何想法?
我想测试如果某些函数不会抛出任何异常,使用unittest模块。 这可能吗?我只知道assertRaises方法,但这只是测试抛出的异常,而None参数不适用于异常类型参数...如何使用Python unittest assertRaises来测试该函数不会抛出任何异常?
任何想法?
因此,只要调用函数,如果它抛出一个异常将被报告为错误不是一个失败这意味着你的单元测试亚军将停止(没有办法继续的话),如果你想将其报告为失败,你可以这样做:
try:
somefunction()
except:
self.fail("....")
如果发生异常,测试将被标记为失败,所以我不明白为什么需要实际声明任何东西。如果你真的想,你永远可以做自己:
try:
foo()
except:
raise AssertionError('should not raise exception')
我通常不用'try' /'except',只是在测试方法底部添加一个注释,比如'#这个测试通过只要没有例外发生' – dcrosta 2012-01-05 18:38:05
好吧,其实如果发生异常时,它将被标记为错误,但是您是对的,它仍被标记。只是想知道是否有一个更清晰的方式来测试这个没有额外的代码(trys/excepts)和没有错误。猜不... – 2012-01-05 18:44:48
我遇到了同样的问题,我的单元测试。 mouad &迈克尔是正确的,但更清晰的方式来处理与一致的方法异常断言。
class TestCase(unittest.TestCase):
def assertNoRaise(self, callableObj):
try:
callableObj()
except:
raise AssertionError('shouldn\'t raise an exception')
def assertAnyRaise(self, callableObj):
try:
callableObj()
except:
return
raise AssertionError('should raise an exception')
或者单独从继承类继承,并且用mixtest和TestCase做mixin。无论哪种方式会工作
和用例
class my_test(TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_assertion(self):
self.assertAnyRaise(lambda: 1+'a')
self.assertNoRaise(lambda: 1+1)
请原谅我的英语不好。
所以我想没有更简单的方法来实现这一点,但通过添加trys/excepts或让它报告错误...谢谢! – 2012-01-05 18:46:19
@JavierNovoaC。很高兴有帮助:) – mouad 2012-01-05 18:48:36