如何找到哪些分支没有被测试覆盖?

How to find which branches are not covered by tests?

我正在测量小型 Python 应用程序的代码覆盖率。

虽然线路覆盖率是100%,但分支覆盖率不是。问题是 coverage 不会给我任何关于未被覆盖的分支位置的指示。

coverage run
    --branch
    --omit=/usr/lib/python3/dist-packages/*,tests/*
    -m unittest discover

returns:

Ran 33 tests in 0.079s

OK
Name              Stmts   Miss Branch BrMiss  Cover   Missing
-------------------------------------------------------------
app/__init__          1      0      0      0   100%   
app/file_finder      93      0     40      0   100%   
app/zipper           66      0     46      7    94%   
-------------------------------------------------------------
TOTAL               160      0     86      7    97%   

我希望 Missing 列包含对应于七个遗漏分支的行,但那里什么也没有。

我应该如何找到它们?

-m 将只包含 "full" 未命中,不包含分支未命中。您可以使用命令

coverage html

创建一组 HTML 页面,其中包括所有覆盖范围的突出显示,包括分支未命中。参见例如this example of HTML reporting, from the documentation.

如果您有足够的勇气尝试预发布版本,coverage.py4.0 也会在文本报告中显示缺少的分支。