首页 文章

代码覆盖率报告“代码运行”,但不是单独文件单元测试的“代码覆盖”

提问于
浏览
0

免责声明;初学者问题!

我的项目结构,为了问题高度简化,看起来像这样:

Project/
|-- main.py
|-- test_main.py

在阅读Jeff Knupp's blogpost on unit testing并编写各种测试之后,我想看看我的代码现在有多少是由测试覆盖的 . 所以我安装了coverage.py,以下让我困惑:

$ coverage运行main.py(显示脚本中的打印/记录)$ coverage报告main.py名称,Stmts,Miss,封面main.py,114,28,75%

问题是,我不在主脚本中运行单元测试,也不认为我应该 . 我在提交之前手动运行test_main.py中的所有测试,并知道他们做了 not 覆盖了我所有语句的75% . 阅读coverage documentation后,我怀疑我的单元测试实现......我是否需要运行测试的main.py中的触发器?

所以我在我的测试脚本上尝试了同样的方法:

$ coverage运行test_main.py(显示所有测试的'OK'测试运行)$ coverage报告test_main.py Name,Stmts,Miss,Cover test_main.py,8,0,100%

但这只是告诉我,在执行该脚本期间,我在测试语句中的代码是100%_2885303 . 那么为什么然后在"increase test coverage"下列出覆盖范围,如果它只显示已使用的代码 .

我真的很想知道我的main.py有多少是由test_main.py覆盖的,我很确定我错过了一些基本的概念 . 有人可以详细说明吗?


在我的Ubuntu机器上运行“覆盖运行test_main.py;覆盖率报告”只给我一个关于test_main.py的报告 . 在我的Windows机器上,这给出:

名称,Stmts,Miss,封面main.py,114,74,35%test_main.py,8,0,100%TOTAL,122,74,39%

覆盖率报告仍然没有意义:

  • test_main覆盖134行代码中的9行,主要覆盖10个函数中的1个 - 覆盖率不是35%

  • 为什么报告test_main的覆盖范围,这些是测试,如果没有't 100% since I' m运行所有测试以查看我的覆盖范围,那将会很奇怪......

  • 我在这里做错了或者这样看待它是bollocks,计算平均"coverage"而用代码本身总结测试提供没有见解并且在我的初学者看来是错误的

1 回答

  • 0

    回答并结束我自己的问题 - 即使我仍然不同意相当多的覆盖逻辑,35%是准确的,并且感谢@Ned指出仅在导入时计算行数 . 它还包括顶级文件描述,argparser和导致此百分比的函数的主要参考 . 在114行代码中总共有40行 - 即使我直接导入的函数本身只有 9 行代码 .

    我真的不喜欢这种报告方式,因为我没有在测试语句中使用所有导入,argparser没有被触及,但它仍然说它们被“覆盖” - 主要是导致语义讨论,我会说这些是“看到“或”通过“,但实际上并没有”被测试覆盖“ .

    我还用 only 另一个测试覆盖率运行了一个不同的文件名 test_main_2.py 以完全相同的方式测试相同的函数...导致(35 100 100)/ 3 = 78%的平均覆盖率而不是之前的(35 100)/ 2 = 68%的覆盖率 .

    But 我确实理解它如何计算覆盖率(平均值)现在允许我以更正确的方式解释数字 . 也许这可以帮助早期初学者解释他或她自己的第一个结果 .

相关问题