Python 3.x 无法获取丢失的行&;鼻内分支2

Python 3.x 无法获取丢失的行&;鼻内分支2,python-3.x,nose2,Python 3.x,Nose2,我试图让我的测试报告丢失的行和分支。我已经将nose2和coverage配置为生成行和分支覆盖,并且据我所知,我已经正确地设置了coverage配置,以提供缺少的行和分支。然而,当我在nose2下运行时,我不能得到覆盖率来给我缺少的列,但如果我直接运行它,我可以 考虑我的项目目录中的以下设置 my_module/ __init__.py main.py tests/ test_a_thing.py unittest.cfg .coveragerc 保险范围的内容 [r

我试图让我的测试报告丢失的行和分支。我已经将nose2和coverage配置为生成行和分支覆盖,并且据我所知,我已经正确地设置了coverage配置,以提供缺少的行和分支。然而,当我在nose2下运行时,我不能得到覆盖率来给我缺少的列,但如果我直接运行它,我可以


考虑我的项目目录中的以下设置

my_module/
    __init__.py
    main.py
tests/
    test_a_thing.py
unittest.cfg
.coveragerc
保险范围的内容

[run]
branch = True

[report]
show_missing = True
unittest.cfg的内容

[coverage]
always-on = True
coverage = my_module
coverage-config = .coveragerc
nose2命令的输出

(example_venv) andy@batman[11:30:53]:/space/test_example$ python -m nose2 -c unittest.cfg --no-user-config
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
----------- coverage: platform linux, python 3.5.2-final-0 -----------
Name                    Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------
my_module/__init__.py       0      0      0      0   100%
my_module/main.py           4      1      2      1    67%
---------------------------------------------------------
TOTAL                       4      1      2      1    67%
如您所见,它给了我
分支
封面,但没有告诉我缺少的分支

如果我只是运行
覆盖率报告
(在运行nose后留下的生成的
覆盖率
文件上)

你可以看到保险公司给了我缺失的分支


当在
nose2
下运行时,我可以看出
coverage
正在拾取
.coveragerc
,因为如果我删除
.coveragerc
[run]
部分下的
branch=True
行,那么在
nose
下运行时,分支覆盖率统计数据将从报告中消失


我是否遗漏了我应该做的额外工作,以便在
nose2
下运行时将此
show_missing
config传递到
coverage

已安装的版本

cov-core==1.15.0
coverage==4.3.4
nose2==0.6.5

tl;dr-必须为
nose2
添加
coverage report=term missing
unittest.cfg
中的
[coverage]
部分(或其他
--config[config],-c[config]
文件)。为了使
Cov核心
通过
show_missing=True
coverage


详细解释:

在命令行上运行
coverage report
时,
show_missing
作为
None
传递到
coverage.coverage()
*中,除非在命令行参数中重写

但是
nos2
使用
cov-core
,它将
show\u missing
传递给
cov\u-core.CovController.summary()
中的
cover.cover()
*作为
True
False
。基于以下逻辑:

if 'term' in self.cov_report or 'term-missing' in self.cov_report:
    show_missing = 'term-missing' in self.cov_report
    self.cov.report(show_missing=show_missing, ignore_errors=True, file=stream)
cov_报告
是在
nos2
中设置的
覆盖率报告
配置

这是我的困惑,因为我试图使用
coverage
的配置来生成缺少的行/分支(在向term报告时,有一个额外的标记用于
show\u missing
),而
Cov Core
将它们视为单独的报告(报告
术语
以获得普通覆盖,或
术语缺失
以获得普通覆盖+缺失行)

因此,不要让自己被这一点覆盖行为所困扰,因为当大多数其他位(包括/排除一个分支覆盖)仍然由
覆盖
的配置驱动时,Cov核心决定覆盖


*coverage.coverage()是一个向后兼容性调整,实际上是coverage.control.coverage()的导入(在coverage/_init__.py中)

if 'term' in self.cov_report or 'term-missing' in self.cov_report:
    show_missing = 'term-missing' in self.cov_report
    self.cov.report(show_missing=show_missing, ignore_errors=True, file=stream)