通过断言对getter进行代码覆盖

时间:2015-02-18 21:51:34

标签: java intellij-idea test-coverage arrange-act-assert

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

我希望测量测试的断言部分的代码覆盖率。 如果在测试的Action部分期间或在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())
}

目前,我使用的工具报告比getA和getB更多。我想要一种方法来检测getBModod没有读取getB。

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

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

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

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