Hỏi: cách phát hiện phạm vi kiểm tra thực tế?Mức độ phù hợp với mã có thể truy cập
Tôi đã nhận thấy một vấn đề với chỉ số bao phủ mã và chất lượng thử nghiệm: phạm vi mã 100% không có nghĩa là mã thực sự được kiểm tra.
Đôi khi kiểm tra cho phép mức độ phù hợp 100% ngay cả khi nó không bao gồm mọi thứ. Vấn đề đặt ở định nghĩa vùng phủ sóng, chúng tôi giả định mức độ phù hợp == mã có thể truy cập.
Nhưng điều đó không đúng, mã có thể đạt 100% nhưng không được kiểm tra 100%. Hãy xem xét ví dụ, thử nghiệm này cung cấp mức độ phù hợp 100% (EMMA), nhưng trên thực tế nó không bao gồm các giá trị sẽ được chuyển đến mô hình dịch vụ. Vì vậy, nếu giá trị sẽ được thay đổi, kiểm tra sẽ không thành công.
Ví dụ:
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);
}
}
Và kiểm tra cho nó:
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);
}
}
Một điều đáng tiếc là nó không hoạt động đối với phiên bản hiện tại của .net. Có thể đã yêu thích điều này cho một spin. – Gishu
Tôi đã cố gắng để google về khuôn khổ đột biến nhưng không phải của họ đã tích hợp với IDE (tốt hơn IDEA). –
Jester mất một cách tiếp cận khá ngây thơ để thử nghiệm đột biến và do đó băng hà chậm. Nếu bạn đang tìm kiếm thử nghiệm đột biến, bạn có thể muốn thử một hệ thống hiện đại hơn như http://pitest.org hoặc javalanche – henry