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