如何使覆盖范围包括未测试的文件?
Posted
技术标签:
【中文标题】如何使覆盖范围包括未测试的文件?【英文标题】:How do I make coverage include not tested files? 【发布时间】:2016-04-16 04:29:11 【问题描述】:我刚刚开始为我使用unittest
和coverage
的python 项目编写一些单元测试。我目前只测试一小部分,但我正在尝试计算代码覆盖率
我运行我的测试并使用以下方法获得覆盖率
python -m unittest discover -s tests/
coverage run -m unittest discover -s tests/
coverage report -m
我遇到的问题是 coverage
告诉我有 44% 的代码覆盖率并且只计算以下文件:
在单元测试中进行了测试(即所有未测试的文件都丢失且不在整体覆盖范围内)
在虚拟环境中的库和实际测试的代码覆盖范围内。肯定不应该在结果中包含实际测试吗?
此外,它说在这些单元测试中实际测试的文件只测试了前几行(在大多数情况下是导入语句)
如何获得更真实的代码覆盖率,或者这就是它的本意?
【问题讨论】:
【参考方案1】:将--source=.
添加到coverage
运行行。它既会将焦点限制在当前目录,也会搜索根本未运行的.py
文件。
【讨论】:
谢谢,这对我有用!coverage run --source=dir -m unittest discover -s tests/
将覆盖 dir。但我可以问:通过子目录(递归)怎么样?
我发现可以使用它来包含多个目录/模块:--source=dir1,dir2,etc
(请注意逗号后面没有空格)。如果可以使用递归选项,它仍然很有用,但万一新模块添加到源代码中
文档:Coverage.py command line usage
--source=dir
将在以 dir 为根的树中的任何位置找到可导入模块。
好的,但这对我不起作用,我有 4.4.1 版本,并且正在使用以下命令在 Ubuntu 16.04 上运行:coverage run --source=./mc -m unittest discover -s tests
(其中mc
是根包目录)。我必须将所有子目录添加到根目录 dir 才能正常工作:coverage run --source=./mc,./mc/win -m unittest discover -s test-dir
【参考方案2】:
如果您改用nose
作为测试运行程序,它的覆盖率插件会提供
--cover-inclusive Include all python files under working directory in
coverage report. Useful for discovering holes in test
coverage if not all files are imported by the test
suite. [NOSE_COVER_INCLUSIVE]
--cover-tests Include test modules in coverage report
[NOSE_COVER_TESTS]
【讨论】:
以上是关于如何使覆盖范围包括未测试的文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将未覆盖的文件视为具有SonarQube通用覆盖XML的0覆盖?