gpt4 book ai didi

python - 当代码抛出 ImportError 时如何进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:28 25 4
gpt4 key购买 nike

我有一个 Python 模块尝试导入一个模块,如果失败,则添加一个轻量级类来复制一些功能作为后备。

如何编写涵盖两种情况的单元测试 - 模块存在时和模块不存在时?

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

例如,如果存在 bar,单元测试将报告仅第 2 行被覆盖,而模块的其余部分未被覆盖。 Python 的覆盖率将在以“except”结尾的行中报告缺失的测试。

最佳答案

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

import sys

sys.path = []

import django
... ImportError ...

import os
... No ImportError ...

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

如果这不起作用,那么您可以在 sys.path 的开头添加一个路径,该路径包含一个在加载时会产生 ImportError 的模块。这是有效的,因为加载了搜索 sys.path 时找到的第一个匹配项,因此这可以替换真正的模块。以下就足够了:

测试.py

import sys
sys.path.insert(0, '.')

import foo

foo/__init__.py

raise ImportError()

关于python - 当代码抛出 ImportError 时如何进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28274406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com