带条件导入与可选依赖的pytest coverage覆盖率统计问题
可选依赖下的测试覆盖率合并与分支标记问题
我通过条件导入实现了一个可根据pandas是否存在切换逻辑的函数,该实现可正常运行,但测试时无论是否安装pandas,pytest coverage总是显示覆盖率不足。即使通过hatch配置两种测试环境,也无法充分覆盖if/else分支的函数定义。
我想了解:是否有合适的方法合并两种环境的测试覆盖率结果?或者能否告知coverage该分支的未覆盖是预期情况?
代码示例
模块代码
try: import pandas as pd PANDAS_INSTALLED = True except ImportError: PANDAS_INSTALLED = False if PANDAS_INSTALLED: def your_function(...): # magic with pandas return output else: def your_function(...): # magic without pandas return output
测试代码
from mypackage import my_module def test_my_function(): res = 'foo' assert my_module.my_function() == res
已尝试的方案
- Mock方式:始终安装pandas并mock全局变量,但函数定义在导入时已完成,mock变量无法生效,尝试mock导入也未成功。
- 多环境合并结果:使用pytest-cov的
--cov-append参数合并结果,但该方式是全局合并,无法按Python版本(如3.8、3.9)分别合并查看。我希望能基于hatch的test.matrix逻辑,按版本合并对应环境的覆盖率,比如coverage combine py38.core py38.pandas,同时不引入tox等额外工具。
内容的提问来源于stack exchange,提问作者FordPrefect
相关产品推荐
相关产品推荐

