声明;初学者问题!
我的项目结构,为了问题而高度简化,看起来像这样:
Project/
|-- main.py
|-- test_main.py
在阅读Jeff Knupp's blogpost on unit testing并编写各种测试之后,我想看看我的代码现在有多少是由测试覆盖的。所以我安装了coverage.py,以下让我感到困惑:
$ coverage运行main.py(显示脚本中的打印/日志记录)
$ coverage报告main.py
姓名,Stmts,Miss,Cover
main.py,114,28,75%
问题是,我没有在主脚本中运行单元测试,也不认为我应该这样做。我在提交之前手动运行test_main.py中的所有测试,并知道他们不覆盖了我所有语句的75%。阅读coverage documentation后,我怀疑我的单元测试实现......我是否需要运行测试的main.py中的触发器?
所以我在我的测试脚本上尝试了同样的事情:
$ coverage运行test_main.py(显示所有测试的'OK'测试运行)
$ coverage报告test_main.py
姓名,Stmts,Miss,Cover
test_main.py,8,0,100%
但这只是告诉我在执行该脚本期间我在测试语句中“击中”了100%的代码。那么为什么然后覆盖"increase test coverage"下的覆盖范围,如果它只显示已使用的代码。
我真的很想看看我的main.py有多少被test_main.py覆盖,我很确定我错过了一些基本概念。有人可以详细说明吗?
在我的Ubuntu机器上运行“coverage run test_main.py;覆盖率报告”只给我一个关于test_main.py的报告。在我的Windows机器上,这给出了:
姓名,Stmts,Miss,Cover
main.py,114,74,35%
test_main.py,8,0,100%
TOTAL,122,74,39%
报道报告仍然没有意义:
答案 0 :(得分:0)
回答并结束我自己的问题 - 即使我仍然不同意一些覆盖逻辑,35%是准确的,并且感谢@Ned指出仅在导入时计算行数。它还包括顶级文件描述,argparser和导致此百分比的函数的主要参考。在114行代码中总共有40行 - 即使我直接导入的函数本身只有 9 代码行。
我不太喜欢这种报道方式,因为我没有在测试声明中使用所有导入,因此argparser没有受到影响,但仍然表示这些是"覆盖" - 主要是导致语义讨论,我会说这些是"看到"或者"通过",但实际上并没有#34;被测试"覆盖。
我还使用仅以不同的文件名test_main_2.py
运行另一个测试覆盖率,以完全相同的方式测试相同的函数...导致(35 + 100 + 100)/ 3 =平均覆盖率为78%而不是之前(35 + 100)/ 2 = 68%覆盖率。
但是我确实理解它如何计算覆盖率(平均值)现在允许我以更正确的方式解释数字。也许这可以帮助早期初学者解释他或她自己的第一个结果。