是否有某种“断言”覆盖工具(针对Java)?

时间:2011-05-11 07:43:14

标签: java code-coverage

在此问题被标记为重复之前,请阅读它。 ;) 关于覆盖工具已有几个问题,但是这与通常的有点不同(我希望)。

根据wikipedia,有几种不同类型的“覆盖”变体会影响“覆盖”一词的几个不同方面。

这里有一个小例子:

public class Dummy {
    public int a = 0;
    public int b = 0;
    public int c = 0;

    public void doSomething() {
        a += 5;

        b += 5;

        c = b + 5;
    }
}

public class DummyTest {

    @Test
    public void testDoSomething() {
        Dummy dummy = new Dummy();

        dummy.doSomething();

        assertEquals( 10, dummy.c );
    }
}

正如您所看到的,测试将覆盖100%的行,字段'c'的值的断言将覆盖此字段,间接也覆盖字段'b',但字段上没有断言覆盖'一个'。 这意味着测试涵盖了100%的代码行,并确保c包含期望值,并且最可能b也包含正确的值,但是a根本没有声明并且可能是完全错误的值。

所以...现在的问题是:是否有工具能够分析(java)代码并创建一个报告,该报告关于断言覆盖哪些字段/变量/未被(直接和/或间接)覆盖的内容? / p>

(好吧,当使用getter而不是public字段时,你会看到没有调用getA(),但这不是我想听到的答案;))

4 个答案:

答案 0 :(得分:2)

  

正如您所看到的,测试将覆盖100%的行,字段'c'的值的断言将覆盖此字段,间接也覆盖字段'b',但字段上没有断言覆盖'一个'。这意味着测试涵盖了100%的代码行,并确保c包含期望值,并且最可能b也包含正确的值,但是a根本没有声明并且可能是完全错误的值。

嗯,不幸的是,“封面”对不同的人来说意味着不同的东西......这个测试确实练习 100%的代码行,但它并没有测试它们全部

mutation testing可以很好地处理您正在寻找的内容。

查看Jester,它使用突变测试来报告代码覆盖率。

答案 1 :(得分:1)

“测试覆盖率”有数百种定义,其中COTS工具最多只处理极少数。 (我的公司构建测试覆盖工具,因此我们跟踪这种事情)。有关有趣概述,请参阅this lecture on test coverage

我听到的最接近的定义是数据覆盖范围;取决于您的定义: - {它告诉您每个数据项在执行期间已被写入和读取。讲座讨论验证每个写入和每个读取都是作为特例进行的。

我不清楚数百个定义,但你可能已经发明了一个:数据覆盖仅限于断言。

答案 2 :(得分:0)

请通过以下链接

Compatibility Test Tools

答案 3 :(得分:0)

如果您正在寻找,那么Java中有Assertions

要查看已覆盖的代码量,您可以使用的工具包括以下示例:     cobertura     clover