在此问题被标记为重复之前,请阅读它。 ;) 关于覆盖工具已有几个问题,但是这与通常的有点不同(我希望)。
根据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(),但这不是我想听到的答案;))
答案 0 :(得分:2)
正如您所看到的,测试将覆盖100%的行,字段'c'的值的断言将覆盖此字段,间接也覆盖字段'b',但字段上没有断言覆盖'一个'。这意味着测试涵盖了100%的代码行,并确保c包含期望值,并且最可能b也包含正确的值,但是a根本没有声明并且可能是完全错误的值。
嗯,不幸的是,“封面”对不同的人来说意味着不同的东西......这个测试确实练习 100%的代码行,但它并没有测试它们全部
mutation testing可以很好地处理您正在寻找的内容。
查看Jester,它使用突变测试来报告代码覆盖率。
答案 1 :(得分:1)
“测试覆盖率”有数百种定义,其中COTS工具最多只处理极少数。 (我的公司构建测试覆盖工具,因此我们跟踪这种事情)。有关有趣概述,请参阅this lecture on test coverage。
我听到的最接近的定义是数据覆盖范围;取决于您的定义: - {它告诉您每个数据项在执行期间已被写入和读取。讲座讨论验证每个写入和每个读取都是作为特例进行的。
我不清楚数百个定义,但你可能已经发明了一个:数据覆盖仅限于断言。
答案 2 :(得分:0)
请通过以下链接
答案 3 :(得分:0)
如果您正在寻找,那么Java中有Assertions。