मेरे पास निम्न श्रेणी है:
सार्वजनिक वर्ग MyClass {निजी एप्पल सेब; सार्वजनिक शून्य मेरी पद्धति () {apple = AppleFactory.createInstance (someStringVariable); .... .... ....}}
और टेस्ट क्लास:
@RunWith (मॉकिटाज्यूनेटरनर.क्लास) सार्वजनिक वर्ग MyClassTest {@InjectMocks MyClass myClass; @Test सार्वजनिक void myMethod () {... ... ...}}
मैक्सेल में एक नकली के रूप में मैं एक ऐप्पल इंस्टैंस को कैसे इंजेक्ट कर सकता हूं?
आप इसे हल करने के लिए 3 संभावनाएं हैं:
सार फैक्ट्री : उपयोग के बजाय एक स्थिर विधि, एक ठोस कारखाना वर्ग का उपयोग करें:
सार्वजनिक सार वर्ग AppleFactory {सार्वजनिक ऐप्पल बनाना अंतर (अंतिम स्ट्रिंग str); } सार्वजनिक श्रेणी के AppleFactoryImpl एप्पलफैक्चर (सार्वजनिक ऐप्पल बनाने की व्यवस्था) (अंतिम स्ट्रिंग str) {// कार्यान्वयन}}
अपने परीक्षण वर्ग में, कारखाना का नकली:
@ रनविथ (मॉकिटाज्यूनेटरनर.क्लास) सार्वजनिक कक्षा मायक्लसटेस्ट {@ मॉक प्राइवेट ऐपलफैक्ट्रीफ़ाफ़ाफ़ाईलमॉक; @ मॅक प्राइवेट एप्पल एप्पल मॉक; @InjectMocks MyClass myClass; @ सार्वजनिक निष्क्रिय सेटअप से पहले (जब (appleFactoryMock.createInstance (Matchers.anystring ())। फिर से (AppleMock);} @Test सार्वजनिक void myMethod () {... ... ...}}
पावरमॉक : एक स्थिर विधि का नकली बनाने के लिए पावरमॉक का उपयोग करें। यह देखने के लिए कि यह कैसे किया गया है।
परीक्षण योग्य वर्ग : ऐप्पल
निर्माण को एक संरक्षित
विधि में लपेटा और एक परीक्षा वर्ग बनाओ जो उसे ओवरराइड कर देता है:
सार्वजनिक वर्ग के मायक्लस {निजी एप्पल सेब; सार्वजनिक शून्य myMethod () {apple = createApple (); .... .... ....} संरक्षित एप्पल बनाओअपपल () {वापस AppleFactory.createInstance (कुछ StringVariable);}} @RunWith (MockitoJUnitRunner.class) पब्लिक क्लास MyClassTest {@Mock Private Apple AppleMock; @InjectMocksMyClass myClass; @Test सार्वजनिक void myMethod () {... ... ...} निजी वर्ग TestableMyClass MyClass का विस्तार करता है {@Override सार्वजनिक शून्य बनाएँआपले () {return appleMock; }}}
बेशक, अपने परीक्षण वर्ग में आपको TestableMyClass
और MyClass
नहीं की जानी चाहिए।
मैं आपको प्रत्येक विधि पर अपनी राय बताऊंगा:
-
सार कारखाना विधि सबसे अच्छी है - यह एक स्पष्ट डिजाइन है जो छुपाता है कार्यान्वयन विवरण
-
परीक्षण योग्य वर्ग - दूसरा विकल्प है जिसमें न्यूनतम परिवर्तन की आवश्यकता है
-
PowerMock
विकल्प है मेरी कम से कम पसंदीदा - बेहतर डिजाइन करने के बजाय, आप अपनी समस्या को नजरअंदाज और छिपाने लेकिन यह अभी भी एक वैध विकल्प है।
Comments
Post a Comment