Pytest 2.5.2 覆盖率报告缺失已处理的行

9 投票
2 回答
7229 浏览
提问于 2025-04-17 20:36

我有一个小项目,使用Python编写,我想生成代码覆盖率报告。当我运行

py.test -x -s MYPACKAGE --cov-report html --cov MYPACKAGE

时,它显示有很多行没有被覆盖。主要是一些导入语句和类/方法的定义。Screenshot

我确定这些行在我的单元测试中都是被处理过的,行19和31-35就能证明这一点。

为什么py.test会把所有的定义标记为“缺失”?

2 个回答

3

为什么py.test把所有的定义都标记为“缺失”?

覆盖率报告是正确的,因为所有这些代码行在测试真正开始之前就已经被导入了。


我确定这些代码行在我的单元测试中都被处理了,行19和31-35就是证明。

所有的一流对象在加载时都会被评估,包括导入的内容、全局变量、函数定义及其参数,还有类定义及其方法、属性和参数。

行19和31-35确实是在单元测试中被处理的,但这并不意味着其他的行也被处理了。

6

一个常见的原因是模块 conftest.py 过早地引入了应该被测量的模块。测试配置当然应该在测试之前进行评估。有时候,这种依赖关系并不容易去除。因此,很多回答都推荐了一些方法来绕过 pytest-cov 扩展:
答案 1答案 2

撰写回答