单元测试覆盖率实际上是如何完成的?

How Unit test coverage is actually done?

我知道覆盖率测试的理论,但实际上,CC工具是如何进行覆盖率测量的?我的意思是,它是否检查每个方法是否有测试它的单元测试?行覆盖率是否以某种方式参与单元测试?我所能找到的只是覆盖率标准等,但我根本不明白这些工具(例如 Sonar)如何实际测量单元测试覆盖率。

覆盖率衡量在自动测试 运行 期间执行了多少 lines/blocks/arcs 代码。

代码覆盖率背后的基本思想很简单。在产品开发过程中,会创建大量测试用例并运行 查找系统中的错误。代码覆盖率分析监视产品代码的哪些部分由测试用例集合执行。如果有产品代码段在测试期间从未 运行,则该产品未经过彻底测试。

因此,如果您的代码覆盖率为 90%,则意味着有 10% 的代码未被测试覆盖。我知道你可能认为 90% 的代码都被覆盖了,但你必须从不同的角度来看。是什么阻止你获得 100% 的代码覆盖率???请记住,拥有“100% 代码覆盖率”并不意味着所有内容都经过了完全测试——虽然这意味着每一行代码都经过了测试,但这并不意味着它们在所有可能的场景下都经过了测试。

使用 Sonar,您可以监控应用程序的整体覆盖范围并根据要求发送百分比指标。要通过项目的集成测试获得代码覆盖率,您只需遵循以下 5 个步骤:

  1. 将 JaCoCo 代理附加并配置到 JVM,您将 运行 对其进行集成测试。

  2. 运行 您在此 JVM 中的自动或手动集成测试。在执行结束时,JaCoCo 会将代码覆盖率报告转储到您在步骤 1 中设置的目的地。

  3. 配置 Sonar 以重复使用此 JaCoCo 报告。在您的项目属性文件中(或直接在命令行中),添加 sonar.jacoco.itReportPath 属性 并将 JaCoCo IT 覆盖率报告的路径作为值。您可以下载示例并查看 projects/code-coverage/it 目录:对于每个启动器,您都会找到一个示例。

  4. 运行 一项分析,以将 JaCoCo 报告提供的信息提供给 Sonar。

  5. 在 Sonar Web 界面上浏览结果。在声纳仪表板中,您可以看到覆盖率最低的 类 并相应地规划您的策略。