Cobertura覆盖和断言关键字

Arm*_*and 6 java unit-testing code-coverage cobertura assertions

我对Cobertura测量的单元测试的线路覆盖范围很痛苦,因为我的assert测试中没有涉及的声明.我应该测试assert离子,有没有办法让Cobertura忽略它们,这样它们不会影响我的测试覆盖率?

ava*_*sen 6

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

尽管如此,assert线条仍然会显示为红色,表明覆盖范围不足.这是因为你的断言通常都是正确的,因此你永远不会遇到假分支.

因此,Cobertura中的分支覆盖率通过使用而变得混乱assert,因为断言行将具有50%的分支覆盖率,使得整个分支覆盖百分比难以解释(或无用).

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

如果以逐个合约的方式使用断言,则无需添加使Java assert语句失败的测试.事实上,对于许多断言(例如,不变量,后置条件),您甚至无法创建会使其失败的对象,因此无法编写此类测试.但是,您可以使用不变量/后置条件来导出行使其边界的测试用例- 请参阅Robert Binder的不变边界模式.但这不会使你的断言失败.

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


Ron*_*onU 2

据推测,您正在使用断言来验证先决条件或其他一些条件集。考虑您的情况是否类似于Argument Exceptions should be Unit Tested

无论如何,我希望您最终会尝试确定是否应该测试这些语句的负路径分支。

是的,无论如何,测试一下这些。你的断言本身就是关于你的假设的逻辑,测试你的防护语句是否能防止/保护你认为它们会发生的情况是一件好事。