假设我们有一个要测试的代码:
class C {
int doSmth() {
return 1;
}
}
现在假设我们在一个类中放置了 2 个单元测试。第一个“测试一切”,而第二个“什么都不做”:
@RunWith(JUnit4.class)
public final class CTest {
@Test
@SuppressWarnings("static-method")
public void testDoSmth() {
assertEquals(1, new C().doSmth());
}
@Test
@SuppressWarnings("static-method")
public void testDoSmth2() throws Exception {
Thread.sleep(1000);
}
}
这是一个 IRL 示例:我已经看到数十个测试通过用一些无用的代码替换测试内容来“修复”,因为被测试的代码合同随着时间的推移而变化。
现在,PIT“入口”单元是一个包含测试方法的类(不是单独的测试方法本身),所以在上述情况下,PIT 不仅会显示 100% 的行覆盖率,还会显示 100% 的变异覆盖率。
好的,我很高兴知道我有 100% 的突变覆盖率,但是我如何识别无用的测试——testDoSmth2()
在上述情况下(假设我的突变覆盖率很高)?