正如您在评论中解释的那样,您担心的是覆盖率报告只会显示行号,并且您希望避免一次又一次地重新检查这些。
另一方面,我不太赞成用注释使代码混乱以使一个或另一个工具满意:对我来说,这一切都会降低可读性。因此,我想提出另一种方法,它可以避免代码混乱,但仍然可以减轻您一直进行重新检查的负担。
这个想法是,创建覆盖情况的基线,您可以根据该基线比较未来的覆盖分析结果。例如,coverage.py 的覆盖率报告如下所示(引自http://coverage.readthedocs.org/en/coverage-4.0.3/index.html):
Name Stmts Miss Cover Missing
-------------------------------------------------------
my_program.py 20 4 80% 33-35, 39
my_other_module.py 56 6 89% 17-23
-------------------------------------------------------
TOTAL 76 10 87%
此输出可用作“基线”的基础:粗略的想法(改进见下文)是,您将此输出存储为“已接受”覆盖情况,并将其与未来的覆盖报告进行比较。不幸的是,每当行号发生变化时,您都会在区分报告时看到差异。为了避免这种情况,可以改进这个基本思想:
借助简单的脚本,您可以转换报告,以显示相应行的内容,而不是行号。例如,基于上述代码示例的假设报告可能如下所示:
Name Stmts Miss Cover Missing
-------------------------------------------------------
my_program.py 20 1 5% 3
从此报告中,您可以为 python 版本 >= 3.3 创建以下“覆盖基线”,例如在文件中coverage-baseline-33andabove.txt
:
my_program.py:
- print('older version of python')
即使您在文件顶部添加例如进一步的导入行,该基线也会看起来相同。将为您确定覆盖范围的其他 python 版本创建更多基线文件。
进一步可能的改进可能是分离行组,例如:
my_program.py:
*
- print('older version of python')
*
- cleanup()
- assert False
my_program2.py:
*
- print('older version of python')
您只会在未涵盖的代码更改(添加、删除、修改、移动)以及文件名更改时看到差异。然后,差异的出现将要求您存储新的“覆盖基线”,或者添加更多测试,直到再次达到原始基线内容。