是否有某种'断言'覆盖工具(用于Java)?

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

根据维基百科,有几种不同类型的“覆盖率”变化会影响“覆盖率”这个术语的几个不同方面。

这里有一个小例子:

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',但是在字段'a'上没有断言覆盖。 。 这意味着测试覆盖了100%的代码行,并确保c包含期望值,并且很可能b也包含正确的值,但a完全没有被声明,并且可能是完全错误的值。

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

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


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

那么,不幸的是,“封面”对不同的人意味着不同的东西......这个测试的确行使了100%的代码行,但是并没有对它们全部进行测试。

你正在寻找的是通过突变测试处理好。

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


“测试覆盖率”有数百个定义,其中COTS工具最多只能处理很少的几个。 (我的公司构建测试覆盖工具,以便跟踪这种事情)。 有关有趣的概述,请参阅关于测试覆盖率的讲座。

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

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


请通过下面的链接

兼容性测试工具

链接地址: http://www.djcxy.com/p/6917.html

上一篇: Is there some kind of 'assertion' coverage tool (for Java)?

下一篇: How does the triggering of mousemove work in Javascript?