Q: 実際のテスト カバレッジを検出するにはどうすればよいですか?
コード カバレッジの測定基準とテストの品質に関する 1 つの問題に気付きました。100% のコード カバレッジは、コードが実際にテストされていることを意味しません。
すべてをカバーしていなくても、テストで 100% のカバー率が得られることがあります。問題はカバレッジ定義にあります。カバレッジ==到達可能なコードを想定しています。
コードは 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);
}
}
そしてそれをテストします:
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);
}
}