Rrr*_*Rrr 5 java junit unit-testing code-coverage mocking
问:如何检测真实的测试覆盖率?
我注意到代码覆盖率指标和测试质量存在一个问题:100%的代码覆盖率并不意味着代码经过了真正的测试.
有时候测试会提供100%的覆盖率,即使它没有覆盖所有内容.问题在于覆盖范围定义,我们假设coverage ==可达代码.
但事实并非如此,代码可以100%可达,但不能100%覆盖测试.
看一下示例,此测试提供100%覆盖率(EMMA),但实际上它不包括将传递给服务模拟的值.因此,如果值将被更改,测试将不会失败.
例:
public class User {
public static final int INT_VALUE = 1;
public static final boolean BOOLEAN_VALUE = false;
public static final String STRING_VALUE = "";
private Service service;
public void setService(Service service) {
this.service = service;
}
public String userMethod() {
return service.doSomething(INT_VALUE, BOOLEAN_VALUE, STRING_VALUE);
}
}
Run Code Online (Sandbox Code Playgroud)
并测试它:
public class UserTest {
private User user;
private Service easyMockNiceMock;
@Before
public void setUp() throws Exception {
user = new User();
easyMockNiceMock = EasyMock.createNiceMock(Service.class);
}
@Test
public void nonCoverage() throws Exception {
// given
user.setService(easyMockNiceMock);
expect(easyMockNiceMock.doSomething(anyInt(), anyBoolean(), (String) anyObject())).andReturn("");
replay(easyMockNiceMock);
// when
user.userMethod();
// then
verify(easyMockNiceMock);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
503 次 |
最近记录: |