我正试图编写一个测试用例,以检查代码是否在except块中。
如果出现异常,我的方法foo()不会抛出/引发它,它只记录信息。
我尝试过使用assertRaises,但后来我意识到这对我不起作用,因为我没有引发异常。
在Python文档中,可以清楚地说:
测试使用也传递给assertRaises()的任何位置或关键字参数调用可调用时是否会引发异常。如果引发异常,则测试通过;如果引发另一个异常,则为错误;如果未引发异常,则测试将失败。
因此,如果我有以下方法:
def foo():
try:
# Something that will cause an exception
except AttributeError:
log.msg("Shit happens")是否有可能编写一个测试用例来测试执行是否在test块中执行?
发布于 2018-03-12 16:53:21
你不能用你想做的方式来做。Python引发并处理各地的异常--例如,每个for循环都通过引发和处理StopIteration退出。因此,断言某个地方存在异常,即使被处理,也几乎总是会过去的。
您所能做的就是嘲弄记录器,如下所示:
_logs = []
def mocklog(str):
_logs.append(str)
mymodule.log = mocklog
mymodule.foo()
assertEqual(_logs, ['Shit happens'])当然,在一个真实的项目中,你可能想要使用一个模拟库,而不是像这样手工破解它,但这应该证明了这个想法。
发布于 2018-03-12 16:50:23
您可以这样使用assertRaises (https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises):
with self.assertRaises(Exception):
foo()如果您想测试日志记录,还有一个方法assertLogs。
https://stackoverflow.com/questions/49240434
复制相似问题