如何使覆盖范围包括未测试的文件?

Posted

技术标签:

【中文标题】如何使覆盖范围包括未测试的文件?【英文标题】:How do I make coverage include not tested files? 【发布时间】:2016-04-16 04:29:11 【问题描述】:

我刚刚开始为我使用unittestcoverage 的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 覆盖范围未显示

如何将未覆盖的文件视为具有SonarQube通用覆盖XML的0覆盖?

协程主体未涵盖在单元测试代码覆盖范围内 - Android Studio

如何在我的颤振测试中生成未测试文件的测试覆盖率?

如何从覆盖范围中排除文件?