@Mock
और @InjectMocks
एनोटेशन के साथ हमेशा की तरह मजाक में, परीक्षण के तहत वर्ग @RunWith(MockitoJUnitRunner.class)
के साथ चलाने की जानी चाहिए।@RunWith (PowerMockRunner.class) बनाम @RunWith (MockitoJUnitRunner.class)
@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {
@Mock
private TaskService mockTaskService;
@InjectMocks
private ReportServiceImpl service;
// Some tests
}
लेकिन कुछ उदाहरण मैं @RunWith(PowerMockRunner.class)
देख रहा हूँ में इस्तेमाल किया जा रहा:
@RunWith(PowerMockRunner.class)
public class Tests {
@Mock
private ISomething mockedSomething;
@Test
public void test1() {
// Is the value of mockedSomething here
}
@Test
public void test2() {
// Is a new value of mockedSomething here
}
}
किसी को बाहर बिंदु सकता है क्या अंतर है और जब मैं एक के बजाय एक का उपयोग करना चाहते हैं? अच्छी तरह से, वहाँ कई मजाक चौखटे वहाँ बाहर हैं:
क्या PowerMock के खिलाफ यह व्यक्तिगत धर्मयुद्ध के साथ हो रहा है !? अब, मैं समझ यह * * कुछ समस्याओं के साथ एक मजाक पुस्तकालय है, लेकिन यह बनाया गया था - वास्तविक समस्याओं कि अंततः आ जब वास्तविक दुनिया परीक्षण लेखन का समाधान करने के प्रयास में (नहीं मेरे द्वारा, BTW मैं एक दूसरे से बनाई गई)। 'FacesContext.getCurrentInstance()' स्थिर विधि ताकि आप 'addMessage (...)' विधि के लिए उम्मीद की कॉल सत्यापित कर सकते हैं मजाक: बस आप एक पूरी तरह से वैध वास्तविक दुनिया स्थिति है जहाँ इस तरह के एक उपकरण उपयोगी होता है देने के लिए। इसके अलावा, यहां किए गए अन्य दावे वास्तव में गलत या अत्यधिक बहस योग्य हैं। –
मेरे अनुभव में, पावर * मॉकिंग फ्रेमवर्क समकक्ष ढांचे के सेट के बाहर * एक * ढांचे नहीं हैं। मेरी आंखों में, यह उत्पाद उन तरह की दवाओं की तरह है, जो केवल दुर्लभ मामलों में ही खाया जाना चाहिए; और आपके डॉक्टर द्वारा बहुत से "ब्रीफिंग" के बाद। बात यह है कि: मैंने PowerMocking से संबंधित समस्याओं को ठीक करने का प्रयास करने में बहुत अधिक घंटे बिताए हैं; या उन लोगों को सुनना जिन्होंने कभी-कभी उन विचित्र समस्याओं को देखा जिन्हें आप कभी सामना करते हैं। और सबसे महत्वपूर्ण बात यह है कि 95% मामलों में, यह बस इतना था कि लोग एक बुरे, अवांछनीय डिजाइन के साथ आए। और इसे बदलने के बजाय, वे PowerMock में बदल गए। – GhostCat
मैं सहमत हूं; टेस्टेबिलिटी समस्याओं को ठीक करने से बचने के लिए डेवलपर्स को एक मॉकिंग लाइब्रेरी नहीं बदलनी चाहिए। यह एक मॉकिंग लाइब्रेरी की सीमाओं के आसपास काम करने के लिए अच्छी ओओ या एपीआई डिज़ाइन से बचने की स्थिति के समान ही सही है। मेरे लिए, इन दोनों परिस्थितियों का सबसे अच्छा जवाब पूरी तरह से मजाक करने से बचने के लिए है, और * एकीकरण * परीक्षण के लिए जाना; यह मैं खुद करता हूं। –