在单元测试中,我想做类似的事情:
result = myFunction()
self.assertFalse(result) OR self.assertRaises(Exception, myFunction)
的想法是,如果myFunction
的实现更改为返回false而不是引发异常(反之亦然),则测试仍将正常运行(即表示非正结果)。< / p>
这样的事情可能吗?
答案 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
的用例以及更改行为的后果。