当前位置: 首页 > 知识库问答 >
问题:

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

戎志勇
2023-03-14

免责声明初学者问题!

为了回答这个问题,我的项目结构高度简化,如下所示:

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

在阅读了Jeff Knupp关于单元测试的博客文章并写了一系列测试之后,我想看看我的代码现在被测试覆盖了多少。所以我安装了coverage.py,以下内容让我困惑:

$coverage运行main。py(显示脚本中的打印/日志)

$覆盖报告main.py

姓名、Stmts、小姐、封面

主要的py,114,28,75%

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

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

$覆盖率运行test_main.py(显示所有测试的'OK'测试运行)

$覆盖报告test_main.py

姓名、Stmts、小姐、封面

主测试单元。py,8,0,100%

但这只是向我表明,在执行该脚本期间,我已经在测试语句中“命中”了100%的代码。那么,为什么覆盖率列在“增加测试覆盖率”下,如果它只是显示使用了什么代码。

我真的很想看看我的主要产品有多少。py包含在测试_main中。我很确定我缺少一些基本的概念。有人能详细说明一下吗?

在我的Ubuntu机器上运行“coverage run test_main.py;coverage report”只会给我一个关于test_main的报告。皮耶。在我的Windows计算机上,这将提供:

姓名、Stmts、小姐、封面

main.py,114, 74, 35%

主测试单元。py,8,0,100%

总数,122,74,39%

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

  1. test_main覆盖134行代码中的9行,10个主函数中的1个-覆盖率不是35%
  2. 为什么报告test_main的覆盖率,这些是测试,如果不是100%,那就奇怪了,因为我正在运行所有的测试来查看我的覆盖率...
  3. 我在这里做错了什么,或者这种看待它的方式是胡说八道,计算“覆盖率”的平均值,而用代码本身总结测试并没有提供洞察力,在我初学者看来是错误的

共有1个答案

司迪
2023-03-14

回答并结束我自己的问题——尽管我仍然不同意相当多的覆盖逻辑,但35%是准确的,感谢@Ned指出,仅在导入时就计算行数。它还包括顶级文件描述、argparser和对函数的主要引用,从而达到这个百分比。这总共是114行代码中的40行,即使我直接导入的函数本身只有9行代码。

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

我还使用不同的文件test\u main\u 2运行了另一个测试覆盖率。py以完全相同的方式测试相同的功能。。。导致(35 100 100)/3=78%的覆盖率平均值,而不是之前的(35 100)/2=68%覆盖率。

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

 类似资料:
  • 新的一年 之前因为上家公司的经营出了问题,年前的大裁员,过了一个漫长的春节。 之后加入了新公司,然后正好赶上一个很紧急的项目,忙成狗,因此好久没更新文章了。 不过,我又回来啦! 前言 自动化测试,我们将使用karma和nightmare,内容会包括: 单元测试 e2e测试(放下一篇文章) 其实,单元测试一般用在写公共包的时候,比如通用的js函数库,通用的UI组件库。基本不太会在做业务项目的时候还使

  • 当使用 生成覆盖率报告后,我的测试在代码覆盖率报告中显示为100%覆盖,如下所示 我尝试将测试移动到它自己的文件夹中,但仍然会得到相同的结果 实际的单元测试不应该出现在覆盖率报告中,并且扭曲了我的覆盖率。它应该只显示实际程序的覆盖范围。

  • 我有一个Android应用程序,它由两个模块组成: 注意:我使用的是Gradle版本3.1.2。 我尝试了几种方法,下面这个确实合并了测试…但是报道并不正确: //UI测试覆盖率过滤(我们需要运行应用程序的单元测试,以便能够使用Jacoco进行过滤) //单元测试覆盖过滤 任务createTestReport(类型:JacocoReport,Dependson:['test UnitteStuni

  • 我正在将ANT构建转换为Maven。我不用声纳。 在Maven中,Jacoco似乎并没有报告单元测试本身的覆盖率,而ANT报告。我也一直在尝试为我的Maven build获得这个,但是我没有找到任何东西。 似乎我应该添加一个

  • Jacoco插件在jenkins报告中显示0%的覆盖率,但当我在本地系统中运行相同的命令时,Jacoco会正确生成报告。我正在使用以下命令: mvn-s xyz/settings.xml-f xyz/xyz/pom.xml清洁安装org.jacoco 所以当我在jenkins中运行这个命令时,它会生成错误的报告。我已经检查了它在工作区目录对应的项目在詹金斯。它显示每个项目的0%覆盖率。但是当我在本