gpt4 book ai didi

assert - 为什么 Cobertura 无法报告断言分支路径已被覆盖?

转载 作者:行者123 更新时间:2023-12-02 09:43:59 24 4
gpt4 key购买 nike

Cobertura ,我无法让它报告已采用断言语句的条件路径。这是已知的限制吗?

我有一个JUnit期望抛出 AssertionError 的测试,并且它正确通过。问题是 Cobertura 报告断言分支未被覆盖。

<小时/>

经过更多调查,我发现部分分支覆盖范围已被检测到。该行的问题是:

assert data != null;

Cobertura 报告的覆盖范围为:

Conditional coverage 75% (3/4) [each condition 50%, 100%].

Cobertura 期望的不同分支条件是什么?

最佳答案

我遇到了同样的问题,因此我花了一些时间对答案进行逆向工程,并将其捐赠给 Stack Overflow。

对于每个 Java assert 语句,Cobertura 都会跟踪两个条件:

  1. 执行给定断言语句时是否启用或禁用断言检查。
  2. 谓词的实际计算结果是 true 还是 false。

因此,总共有四种可能的结果。所提供的资料HTML 报告中的给定行包含

  • 条件 1 的结果(从 2 种中取出 0-2 种可能性,通过启用或禁用检查来解决执行问题),
  • 以及条件 2 的结果(从 2 中取出 0-2 种可能性:断言通过或失败)。
  • 总体结果(0-4,满分 4),

典型场景是:

  • 运行 Cobertura 一次,并禁用断言检查。禁用。您将得到:
    启用/禁用:50%(禁用);通过/失败:0%(未达到);因此总体为 25%。
    Cobertura 会将其报告为

    条件覆盖率 25% (1/4) [每个条件 50%、0%]

  • 运行 Cobertura 一次,并启用断言检查。启用。通常你的断言总是正确的,因此你得到:
    启用/禁用:50%(启用);通过/失败:50%(始终为真);因此总体而言:50%。

  • 运行 Cobertura 两次,一次进行断言检查启用,一次不启用。假设断言总是正确的,我们得到:
    启用/禁用:100%(启用和禁用);通过/失败:50%(始终为真);因此总体为 75%。

然后,如果我们添加测试用例来确保给定的断言至少失败一次,并且至少通过一次,我们得到所有数字均为 100%。

但是请注意,如果您按照契约设计风格使用断言,通常你甚至无法让他们失败,请参阅另一个堆栈溢出问题的答案, Cobertura coverage and the assert keyword

最后:虽然这些数字是可以解释的,但我不确定它们是否非常有用。我的偏好是能够从整体报告中省略与断言相关的覆盖范围。 Clover可以做到这一点,但我不知道有一个开源覆盖率分析工具具有这个不错的功能。

关于assert - 为什么 Cobertura 无法报告断言分支路径已被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5111910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com