无法在 nose2 中获取缺失的线条和分支
Unable to get missing lines & branches in nose2
我正在尝试让我的测试报告缺失的行和分支。我已经配置了 nose2 和 coverage 以生成线路和分支覆盖,据我所知,我已经正确设置了覆盖配置以提供缺失的线路和分支。但是,当 运行 在 nose2 下时,我无法获得覆盖以给我缺少的列,但如果我直接 运行 就可以。
考虑在我的项目目录中进行以下设置。
my_module/
__init__.py
main.py
tests/
test_a_thing.py
unittest.cfg
.coveragerc
.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%
正如你所看到的,它给了我Branch
封面,但没有告诉我缺少的分支。
如果我只是运行 coverage report
(在运行宁鼻子后留下的生成的.coverage
文件上)
(example_venv) andy@batman[11:34:15]:/space/test_example$ coverage report
Name Stmts Miss Branch BrPart Cover Missing
-------------------------------------------------------------------
my_module/__init__.py 0 0 0 0 100%
my_module/main.py 4 1 2 1 67% 3, 2->3
-------------------------------------------------------------------
TOTAL 4 1 2 1 67%
你可以看到覆盖给了我缺失的分支。
我可以看出 coverage
在 nose2
下 运行 时拾取 .coveragerc
,因为如果我删除 branch = True
下的行 [ .coveragerc
中的 =23=] 部分,然后当 nose
下的 运行 时,分支覆盖统计数据从报告中消失。
我是否遗漏了一些我应该做的额外的事情来让这个 show_missing
配置在 nose2
下 运行 时传递给 coverage
?
安装的版本
cov-core==1.15.0
coverage==4.3.4
nose2==0.6.5
tl;dr - 必须为 nose2
添加 coverage-report = term-missing
到 unittest.cfg
(或其他 --config [CONFIG], -c [CONFIG]
文件)的 [coverage]
部分。为了 Cov-Core
将 show_missing = True
传递给 coverage
更长的解释:
当 command-line 上的 运行 coverage report
时,show_missing
将作为 None
传递到 coverage.coverage()
* 中,除非在命令行中被覆盖参数。
然而 nose2
使用 cov-core
,它将 show_missing
传递给 cov_core.CovController.summary()
中的 coverage.coverage()
* 作为 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_report
是在 nose2
.
中设置的 coverage-report
配置
所以这是我的困惑,因为我试图使用 coverage
的配置来产生缺失的 lines/branches(在做学期报告时,show_missing
有一个额外的标志),当 Cov-Core
将它们视为单独的报告时(报告 term
以获得普通覆盖,或 term-missing
获得普通覆盖 + 缺失行)。
所以不要让自己被这种覆盖行为所困扰 Cov-Core
已经决定覆盖,而大多数其他位(include/exclude 一个分支覆盖)仍然由 coverage
的配置。
*coverage.coverage() 是向后兼容性调整,实际上是 coverage.control.Coverage()[=59 的导入(在 coverage/__init__.py 中) =]
我正在尝试让我的测试报告缺失的行和分支。我已经配置了 nose2 和 coverage 以生成线路和分支覆盖,据我所知,我已经正确设置了覆盖配置以提供缺失的线路和分支。但是,当 运行 在 nose2 下时,我无法获得覆盖以给我缺少的列,但如果我直接 运行 就可以。
考虑在我的项目目录中进行以下设置。
my_module/
__init__.py
main.py
tests/
test_a_thing.py
unittest.cfg
.coveragerc
.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%
正如你所看到的,它给了我Branch
封面,但没有告诉我缺少的分支。
如果我只是运行 coverage report
(在运行宁鼻子后留下的生成的.coverage
文件上)
(example_venv) andy@batman[11:34:15]:/space/test_example$ coverage report
Name Stmts Miss Branch BrPart Cover Missing
-------------------------------------------------------------------
my_module/__init__.py 0 0 0 0 100%
my_module/main.py 4 1 2 1 67% 3, 2->3
-------------------------------------------------------------------
TOTAL 4 1 2 1 67%
你可以看到覆盖给了我缺失的分支。
我可以看出 coverage
在 nose2
下 运行 时拾取 .coveragerc
,因为如果我删除 branch = True
下的行 [ .coveragerc
中的 =23=] 部分,然后当 nose
下的 运行 时,分支覆盖统计数据从报告中消失。
我是否遗漏了一些我应该做的额外的事情来让这个 show_missing
配置在 nose2
下 运行 时传递给 coverage
?
安装的版本
cov-core==1.15.0
coverage==4.3.4
nose2==0.6.5
tl;dr - 必须为 nose2
添加 coverage-report = term-missing
到 unittest.cfg
(或其他 --config [CONFIG], -c [CONFIG]
文件)的 [coverage]
部分。为了 Cov-Core
将 show_missing = True
传递给 coverage
更长的解释:
当 command-line 上的 运行 coverage report
时,show_missing
将作为 None
传递到 coverage.coverage()
* 中,除非在命令行中被覆盖参数。
然而 nose2
使用 cov-core
,它将 show_missing
传递给 cov_core.CovController.summary()
中的 coverage.coverage()
* 作为 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_report
是在 nose2
.
coverage-report
配置
所以这是我的困惑,因为我试图使用 coverage
的配置来产生缺失的 lines/branches(在做学期报告时,show_missing
有一个额外的标志),当 Cov-Core
将它们视为单独的报告时(报告 term
以获得普通覆盖,或 term-missing
获得普通覆盖 + 缺失行)。
所以不要让自己被这种覆盖行为所困扰 Cov-Core
已经决定覆盖,而大多数其他位(include/exclude 一个分支覆盖)仍然由 coverage
的配置。
*coverage.coverage() 是向后兼容性调整,实际上是 coverage.control.Coverage()[=59 的导入(在 coverage/__init__.py 中) =]