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

Dan*_*ina 7 java code-coverage

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

根据维基百科,有几种不同类型的"覆盖"变化会影响"覆盖"一词的几个不同方面.

这里有一个小例子:

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 );
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Don*_*oby 3

正如您所看到的,测试将具有 100% 行的覆盖率,对字段“c”的值的断言将覆盖该字段并间接覆盖字段“b”,但是字段“a”上没有断言覆盖。这意味着测试覆盖了 100% 的代码行,并确保 c 包含预期值,并且 b 很可能也包含正确的值,但是 a 根本没有被断言,并且可能是完全错误的值。

嗯,不幸的是,“覆盖”对于不同的人来说意味着不同的事情......这个测试确实测试了100% 的代码行,但它并没有测试所有的代码行。

您正在寻找的内容可以通过突变测试得到很好的处理。

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