【问题标题】: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. 在单元测试中进行了测试(即所有未测试的文件都丢失且不在整体覆盖范围内)

  2. 在虚拟环境中的库和实际测试的代码覆盖范围内。肯定不应该在结果中包含实际测试吗?

此外,它说在这些单元测试中实际测试的文件只测试了前几行(在大多数情况下是导入语句)

如何获得更真实的代码覆盖率,或者这就是它的本意?

【问题讨论】:

    标签: python unit-testing python-unittest coverage.py


    【解决方案1】:

    --source=. 添加到coverage 运行行。它既会将焦点限制在当前目录,也会搜索根本未运行的.py 文件。

    【讨论】:

    • 谢谢,这对我有用! coverage run --source={dir} -m unittest discover -s tests/ 将覆盖 {dir}。但我可以问:通过子目录(递归)怎么样?
    • 我发现可以使用它来包含多个目录/模块:--source={dir1},{dir2},{etc}(请注意逗号后面没有空格)。如果可以使用递归选项,它仍然很有用,但万一新模块添加到源代码中
    • --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]
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      相关资源
      最近更新 更多