或者断言单元测试

时间:2014-07-29 19:45:31

标签: python unit-testing testing python-unittest

在单元测试中,我想做类似的事情:

result = myFunction()
self.assertFalse(result) OR self.assertRaises(Exception, myFunction)

的想法是,如果myFunction的实现更改为返回false而不是引发异常(反之亦然),则测试仍将正常运行(即表示非正结果)。< / p>

这样的事情可能吗?

2 个答案:

答案 0 :(得分:4)

您可以检查myFunction()是否会引发特定异常:

try:
    self.assertFalse(myFunction())
except SpecificException:
    pass

在这种情况下,如果myFunction()引发SpecificException,则会默默忽略它。

换句话说,您会在两种情况下看到测试失败:myFunction()引发您不等待的异常,或者myFunction()调用的结果不会评估为{{1 }}


如果您的函数可以抛出任何异常,您可以检查是否在except块中捕获了False并重新加载它,默默地忽略其他异常:

AssertionError

请注意,这对我来说似乎不太直观和明确。在一个理想的世界中,您需要分别处理这两种情况:创建一个测试,使try: self.assertFalse(myFunction()) except AssertionError: raise except: pass 结果导入myFunction(),另一个导致它引发异常。

答案 1 :(得分:1)

你可以,但这会让你的考试变弱。使用myFunction的每个其他单元测试都必须假设它可能引发异常或返回False - 否则该行为发生变化时测试可能会中断。

使所有其他测试适应这种不确定性将使所有这些代码更难编写。为了什么目的?好处是可疑的。

相反,做一个使用assertRaises的明确测试。如果实现更改,则让测试失败,然后将测试更改为assertFalse。这种变化也可能导致其他测试失败,,这是一件好事。它将强制您查看myFunction的用例以及更改行为的后果。