在进行单元测试时,是否有办法仅在某些步骤中启用代码覆盖率分析?
我希望测量测试的断言部分的代码覆盖率。 如果在测试的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语法。
答案 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的正确性。因此,测试检查的内容多于断言语句直接涵盖的内容。
您可能正在寻找的是突变测试。您想要查看代码是否不仅仅是由测试执行,而且如果测试能够检测到错误的代码行为。变异测试将错误引入源代码并分析测试是否可以揭示这些错误。