在Cobertura中,我无法报告断言语句的条件路径。这是一个已知的限制吗?
我有一个JUnit测试,期望抛出AssertionError,并且它正确传递。问题是Cobertura报告断言分支没有被覆盖。
经过更多调查后,我发现正在检测到部分分支覆盖范围。问题是:
assert data != null;
和Cobertura报道的报道为:
条件覆盖率75%(3/4)[每种情况50%,100%]。
Cobertura期待的分支条件有哪些?
答案 0 :(得分:10)
我遇到了同样的问题,所以我花了一些时间来反向设计答案,将其捐赠给Stack Overflow。
对于每个Java assert
语句,Cobertura会跟踪两个条件:
因此,总共有四种结果是可能的。提供的信息 对于HTML报告中的给定行,包含
典型情况是:
运行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 coverage and the assert keyword 。
最后:虽然这些数字是可以解释的,但我不确定它们是否非常有用。我倾向于能够从总体报告中省略与断言相关的报道。 Clover可以做到这一点,但我不知道有这个很好的功能的开源覆盖分析工具。
答案 1 :(得分:3)
通过两次运行JUnit,我获得了100%的覆盖率;一旦启用断言,一次禁用断言。