首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python中的unittest检查代码是否进入了How块

问如何使用Python中的unittest检查代码是否进入了How块
EN

Stack Overflow用户
提问于 2018-03-12 16:46:43
回答 2查看 946关注 0票数 1

我正试图编写一个测试用例,以检查代码是否在except块中。

如果出现异常,我的方法foo()不会抛出/引发它,它只记录信息。

我尝试过使用assertRaises,但后来我意识到这对我不起作用,因为我没有引发异常。

在Python文档中,可以清楚地说:

测试使用也传递给assertRaises()的任何位置或关键字参数调用可调用时是否会引发异常。如果引发异常,则测试通过;如果引发另一个异常,则为错误;如果未引发异常,则测试将失败。

因此,如果我有以下方法:

代码语言:javascript
复制
def foo():
    try:
        # Something that will cause an exception
    except AttributeError:
        log.msg("Shit happens")

是否有可能编写一个测试用例来测试执行是否在test块中执行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-12 16:53:21

你不能用你想做的方式来做。Python引发并处理各地的异常--例如,每个for循环都通过引发和处理StopIteration退出。因此,断言某个地方存在异常,即使被处理,也几乎总是会过去的。

您所能做的就是嘲弄记录器,如下所示:

代码语言:javascript
复制
_logs = []
def mocklog(str):
    _logs.append(str)

mymodule.log = mocklog
mymodule.foo()
assertEqual(_logs, ['Shit happens'])

当然,在一个真实的项目中,你可能想要使用一个模拟库,而不是像这样手工破解它,但这应该证明了这个想法。

票数 2
EN

Stack Overflow用户

发布于 2018-03-12 16:50:23

您可以这样使用assertRaises (https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises):

代码语言:javascript
复制
with self.assertRaises(Exception):
     foo()

如果您想测试日志记录,还有一个方法assertLogs。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49240434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档