其他分享
首页 > 其他分享> > 使用PIT查找无用的单元测试

使用PIT查找无用的单元测试

作者:互联网

假设我们有一个我们想要测试的代码:

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“entry”单元是一个包含测试方法的类(不是单独的测试metod本身),
所以在上述情况下,PIT不仅会显示100%的线覆盖率,还会显示100%的突变覆盖率.

好的,我很高兴知道我有100%的突变覆盖率,
但是如何在上述情况下识别无用的测试 – testDoSmth2()(假设我的变异覆盖率很高)?

解决方法:

目前没有任何内置功能,但是您需要检测无用(在检测故障方面)测试所需的数据.

XML报告输出每个突变的查杀(通常在测试方法的级别).任何不杀死突变的测试都可以在不影响突变评分的情况下被删除.

当然,不杀死突变的测试仍可能因其他原因而有价值,例如:描述单位的作用.

然而,通过静态分析可以更有效地检测到示例中显示的极端情况 – 测试显然不会运行任何代码,因此无法检测到其中的错误

标签:java,unit-testing,mutation-testing,pitest
来源: https://codeday.me/bug/20190519/1138087.html