gpt4 book ai didi

java - Cobertura 覆盖率和 assert 关键字

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:58 26 4
gpt4 key购买 nike

我的由 Cobertura 测量的单元测试的线路覆盖率很低,因为我有 assert 语句,这些语句未包含在测试中。我应该测试 assert ionic 吗?有没有办法让 Cobertura 忽略它们,这样它们就不会影响我的测试覆盖率?

最佳答案

Java assert 语句的 line 覆盖率应该通过运行启用断言的测试套件来简单地覆盖,即,将 -ea 作为参数提供给 jvm。如果您这样做,您会发现 cobertura 很容易报告 100% 的覆盖率,前提是您的其余行也被覆盖了。

尽管如此,assert 行仍会显示为红色,表明覆盖率不足。这是因为你的断言通常总是正确的,所以你永远不会遇到错误的分支。

因此,Cobertura 中的分支覆盖率因使用 assert 而变得困惑,因为断言行将具有 50% 的分支覆盖率,导致整体分支覆盖率难以解释(或无用)。

Clover有一个很好的功能,可以在计算覆盖率时忽略 assert。我还没有在任何开源 Java 覆盖工具中看到此功能。

如果您在 design-by-contract 中使用断言样式,无需添加使 Java assert 语句失败的测试。事实上,对于许多断言(例如,不变量、后置条件),您甚至无法创建会使它们失败的对象,因此不可能编写此类测试。不过,您可以做的是使用不变量/后置条件来派生测试用例来执行它们的边界——请参阅 Robert Binder 的 invariant boundaries图案。但这不会使您的断言失败。

只有当给定方法的前提条件非常棘手时,您才可能需要考虑编写旨在使前提条件失败的测试。但重新考虑您的先决条件可能是一个更好的主意。

关于java - Cobertura 覆盖率和 assert 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995471/

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