当代码抛出一个重要错误时,如何进行单元测试?

2024-04-25 14:05:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python模块,它尝试导入一个模块,如果失败,adds会设置一个轻量级类来复制一些功能作为后备。在

我如何编写一个涵盖这两种情况的单元测试—模块存在时和模块不存在时?在

try:
    from foo import bar
except ImportError:
    class bar(object):
        def doAThing(self):
            return "blah"  

例如,如果存在bar,单元测试将报告只覆盖第二行,而模块的其余部分则没有覆盖。Python的覆盖率将报告在末尾带有“except”的行上缺少的测试。在


Tags: 模块fromimport功能foo报告bar情况
1条回答
网友
1楼 · 发布于 2024-04-25 14:05:41

模块从sys.path数组加载。如果清除该数组,则任何非核心导入都将失败。以下命令在ipython中的虚拟env中运行,可以访问django

import sys

sys.path = []

import django
... ImportError ...

import os
... No ImportError ...

另一种选择是使用两个虚拟环境。一个有模块,一个没有。不过,这会使运行测试稍微困难一些。

如果这不起作用,那么您可以添加一个路径到sys.path的开头,它有一个模块,在加载时将生成一个ImportError。这是因为在搜索sys.path时找到的第一个匹配项已加载,因此这可以替换实际的模块。以下就足够了:

测试.py

^{pr2}$

foo/\uu init\uy.py

raise ImportError()

相关问题 更多 >

    热门问题