के साथ एक सिंगलटन का मज़ाक उड़ाते हुए मुझे कुछ विरासत कोड का परीक्षण करने की आवश्यकता है, जो एक विधि कॉल में सिंगलटन का उपयोग करता है। परीक्षण का उद्देश्य यह सुनिश्चित करना है कि क्लॉस सेंडर टेस्ट सिंगलेट्स विधि को कॉल करता है। मैंने SO पर समान प्रश्न देखे हैं, लेकिन सभी उत्तरों को अन्य निर्भरताओं (विभिन्न परीक्षण ढांचे) की आवश्यकता होती है - दुर्भाग्यवश मैं मॉकिटो और जुनीट का उपयोग करने तक सीमित हूं, लेकिन यह इस तरह के लोकप्रिय ढांचे के साथ पूरी तरह से संभव होना चाहिए।मॉकिटो
सिंगलटन:
public class FormatterService {
private static FormatterService INSTANCE;
private FormatterService() {
}
public static FormatterService getInstance() {
if (INSTANCE == null) {
INSTANCE = new FormatterService();
}
return INSTANCE;
}
public String formatTachoIcon() {
return "URL";
}
}
परीक्षण के अंतर्गत वर्ग:
public class DriverSnapshotHandler {
public String getImageURL() {
return FormatterService.getInstance().formatTachoIcon();
}
}
इकाई परीक्षण:
public class TestDriverSnapshotHandler {
private FormatterService formatter;
@Before
public void setUp() {
formatter = mock(FormatterService.class);
when(FormatterService.getInstance()).thenReturn(formatter);
when(formatter.formatTachoIcon()).thenReturn("MockedURL");
}
@Test
public void testFormatterServiceIsCalled() {
DriverSnapshotHandler handler = new DriverSnapshotHandler();
handler.getImageURL();
verify(formatter, atLeastOnce()).formatTachoIcon();
}
}
विचार खतरनाक सिंगलटन से अपेक्षित व्यवहार कॉन्फ़िगर करने के लिए किया गया था, चूंकि परीक्षण के तहत कक्षा इसे प्राप्त करने के लिए कॉल करेगा और फिर प्रारूप TachoIcon विधियों। दुर्भाग्य से यह एक त्रुटि संदेश के साथ विफल:
when() requires an argument which has to be 'a method call on a mock'.
तुम भी PowerMock का उपयोग किए बिना Mockito में ऐसा नहीं कर सकते, जब तक आप अपनी वर्गों में से एक refactor। लेकिन मुझे यकीन नहीं है कि आप क्यों चाहते हैं। आप यूनिट एक विधि के साथ एक विधि का परीक्षण कर रहे हैं, और कोई आंतरिक तर्क नहीं है। यह असफल नहीं हो सकता है। अपने परीक्षण प्रयास को कहीं और खर्च करें। –
"परीक्षण का उद्देश्य यह सुनिश्चित करना है कि क्लॉस सेंडर टेस्ट सिंगलेट्स विधि को कॉल करता है।" इस तरह की चीज के उद्देश्य के रूप में कोई अच्छा परीक्षण मामला नहीं होना चाहिए।इसके बजाय, कुछ सार्थक व्यावसायिक कार्यक्षमता का परीक्षण करना है। एक निर्भरता का मज़ाक उड़ाते हुए और एक विधि की पुष्टि करना गलत नहीं है, लेकिन यह केवल तभी किया जाना चाहिए जब आवश्यक हो। । –