getter 通过断言的代码覆盖率

code-coverage of the getter through the assert

在进行单元测试时,有没有办法只在某些步骤中启用代码覆盖率分析?

我想测量测试断言部分的代码覆盖率。 如果该行是在测试的 Action-part 或 assert-part 期间执行的,我当前使用的工具不会产生任何影响。

因此,我无法检查断言方法是否读取了我的 bean 的所有 getter。 理想情况下,我只想在我的某些方法执行期间激活覆盖措施。

代码示例:

//method to test
void runToTest(Bean myBean){
    myBean.setA(1);
    myBean.setB(2);
    aString=myBean.getA()+myBean.getB();
}

@Test
void should_check_all_field(){
    myBean=new Bean()
    myService.runToTest(myBean);
    assertMethode();

 }
void assertMethod(){
     Assert.assertNotNull(myBean.getA())
}

目前我用的工具report比getA和getB都涵盖了。我想要一种方法来检测 getB 尚未被 assertMethod 读取。

我使用 Java 和 IntelliJ,我的测试 class 遵循 Arrange-Act-Assert 语法。

如果我误解了什么,请纠正我,您正在进行 JUnit 测试,然后将检查覆盖率作为测试的一部分?这对我来说似乎是手动步骤,这是您在 JUnit 测试中不希望看到的,对吗?

在下面的示例中,我使用了 EasyMock,但您可以使用任何您喜欢的 ;-)

@Test
public void testGetters() {
    Bean bean = EasyMock.createMock(Bean.class);
    // set your expectations
    EasyMock.expect(bean.getA()).andReturn(0).times(1);
    EasyMock.replay(bean);

    // use the bean
    bean.getA(); // if this is commented, test fails

    // verify your expectations
    EasyMock.verify(bean);
}

这是否与您想要实现的目标相似?

我用的是maven项目,我的依赖是

<dependencies>

    <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>3.3.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

</dependencies>

不,我不知道有任何工具支持此功能。

代码覆盖率表示您的源代码的哪一部分 运行 通过了测试。通过检查 get 方法的结果,您也在测试 getter 的正确性。因此,测试检查的不仅仅是断言语句直接涵盖的内容。

您可能正在寻找的是 变异测试。 您想要查看代码是否不仅由测试执行,而且还想查看测试是否能够检测到代码的不正确行为。突变测试将错误引入源代码并分析测试是否可以揭示这些错误。

另请参阅: