我遇到了同样的问题,所以我花了一些时间对答案进行逆向工程,并将其捐赠给 Stack Overflow。
对于每个 Javaassert
语句,Cobertura 跟踪两个条件:
- 是否在启用或禁用断言检查的情况下执行给定的断言语句。
- 谓词的实际计算结果是真还是假。
因此,总共可能有四种结果。在 HTML 报告中为给定行提供的信息包括
- 条件 1 的结果(从 2 中取出 0-2 种可能性,在启用或禁用检查的情况下处理执行),
- 以及条件 2 的结果(从 2 中取出 0-2 种可能性:断言通过或失败)。
- 总体结果(4 分中的 0-4 分),
典型的场景是:
运行 Cobertura 一次,禁用断言检查。您将获得:
启用/禁用:50%(禁用);通过/失败:0%(未达到);因此总体为 25%。
Cobertura 将报告为
Conditional coverage 25% (1/4) [each condition 50%, 0%]
运行 Cobertura 一次,启用断言检查。通常你的断言总是正确的,因此你得到:
启用/禁用:50%(启用);通过/失败:50%(始终正确);因此总体而言:50%。
运行 Cobertura 两次,一次启用断言检查,一次未启用。假设断言始终为真,我们得到:
启用/禁用:100%(启用和禁用);通过/失败:50%(始终正确);因此总体为 75%。
然后,如果我们添加测试用例以确保给定的断言至少失败一次,并且至少通过一次,我们得到的所有数字都是 100%。
但是请注意,如果您以合同设计风格使用断言,通常甚至无法使它们失败,请参阅另一个 Stack Overflow 问题的答案,Cobertura 覆盖范围和 assert 关键字。
最后:虽然这些数字是可以解释的,但我不确定它们是否非常有用。我的偏好是能够从整体报告中省略与断言相关的报道。Clover可以做到这一点,但我不知道有一个开源覆盖分析工具具有这个不错的功能。