प्रश्न: वास्तविक परीक्षण कवरेज का पता कैसे लगाएं?कवरेज बनाम पहुंच योग्य कोड
मैंने कोड कवरेज मीट्रिक और परीक्षण गुणवत्ता के साथ एक समस्या देखी है: 100% कोड कवरेज का मतलब यह नहीं है कि कोड वास्तव में परीक्षण किया जाता है।
कभी-कभी परीक्षण 100% कवरेज देता है, भले ही इसमें सब कुछ शामिल न हो। समस्या कवरेज परिभाषा में बताती है, हम कवरेज == पहुंच योग्य कोड मानते हैं।
लेकिन यह सच नहीं है, कोड 100% पहुंच योग्य हो सकता है लेकिन परीक्षण के साथ 100% कवर नहीं किया जा सकता है।
उदाहरण के लिए एक नज़र डालें, यह परीक्षण 100% कवरेज (ईएमएमए) देता है, लेकिन असल में इसमें मूल्यों को शामिल नहीं किया जाता है जो सेवा मॉक को पारित किया जाएगा। इसलिए, यदि मूल्य बदला जाएगा, परीक्षण विफल नहीं होगा।
उदाहरण:
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);
}
}
एक दयालुता यह .NET के वर्तमान संस्करण के लिए काम नहीं करती है। एक स्पिन के लिए इसे लेना पसंद करेंगे। – Gishu
मैंने उत्परिवर्तन ढांचे के बारे में Google की कोशिश की है लेकिन उनमें से कोई भी आईडीई (अधिमानतः आईडीईए) के साथ एकीकरण नहीं है। –
जेस्टर ने उत्परिवर्तन परीक्षण के लिए एक सुंदर बेवकूफ दृष्टिकोण लिया और इसलिए धीरे-धीरे धीमा था। यदि आप उत्परिवर्तन परीक्षण को देख रहे हैं तो आप http://pitest.org या javalanche – henry