0

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

我希望测量测试断言部分的代码覆盖率。如果在测试的操作部分或断言部分执行该行,我目前使用的工具不会产生影响。

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

代码示例:

//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())
}

目前,我使用的报告工具比 getA 和 getB 都涵盖了。我想要一种方法来检测getB 没有被assertMethod 读取。

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

4

2 回答 2

0

如果我误解了什么,请纠正我,你正在做 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>
于 2015-02-18T22:19:55.057 回答
0

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

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

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

另请参阅:https ://stackoverflow.com/a/27400613/584532

于 2015-02-18T22:59:40.457 回答