2014-11-03 8 views
5

नकली कार्यान्वयन के बिना एक बड़ी परियोजना में Guice सार मॉड्यूल के कार्यान्वयन का परीक्षण कैसे करें? क्या बाइंड() और इंजेक्ट() विधियों का परीक्षण करना संभव है?Guice सार मॉड्यूल के कार्यान्वयन का परीक्षण कैसे करें?

+3

आप ढांचे का परीक्षण नहीं करना चाहते हैं, तो बस उस गधे पर भरोसा करें जो बाध्य और इंजेक्ट ठीक काम कर रहे हैं। यदि आप अपने मॉड्यूल कार्यान्वयन का परीक्षण करना चाहते हैं, तो Modules.overwrite पर एक नज़र डालें, आप अपने उत्पादन मॉड्यूल रख सकते हैं और पर्याप्त नकली/नकली सामान को ओवरराइट कर सकते हैं ताकि आप अभी भी आसानी से उन्हें परीक्षण कर सकें। –

उत्तर

4

आमतौर पर गुइस मॉड्यूल का परीक्षण करने का सबसे अच्छा तरीका है अपने परीक्षण में इंजेक्टर बनाना और यह सुनिश्चित करना कि आप उन चाबियों के उदाहरण प्राप्त कर सकें जिनके बारे में आप परवाह करते हैं।

उत्पादन सामग्री के बिना ऐसा करने के लिए आपको अन्य मॉड्यूल के साथ कुछ मॉड्यूल को प्रतिस्थापित करने की आवश्यकता हो सकती है। आप अलग-अलग बाइंडिंग को चुनिंदा ओवरराइड करने के लिए Modules.override का उपयोग कर सकते हैं, लेकिन आप आमतौर पर "उत्पादन" प्रकार मॉड्यूल स्थापित करने और इसके बजाय फ़ेक्ड बाइंडिंग का उपयोग करने से बेहतर होते हैं।

चूंकि Guice 4.0 में एक सहायक वर्ग BoundFieldModule है जो इससे मदद कर सकता है।

public final class MyModuleTest { 
    @Bind @Mock DatabaseConnection dbConnection; 
    @Bind @Mock SomeOtherDependency someOtherDependency; 

    @Inject Provider<MyThing> myThingProvider; 

    @Before public void setUp() { 
    MockitoAnnotations.initMocks(this); 
    Guice.createInjector(new MyModule(), BoundFieldModule.of(this)) 
     .injectMembers(this); 
    } 

    @Test public void testCanInjectMyThing() { 
    myThingProvider.get(); 
    } 
} 

वहाँ Guice विकि पर अधिक documentation for BoundFieldModule है: मैं अक्सर की तरह परीक्षण की स्थापना की।

+0

उत्तर के लिए धन्यवाद। क्षमा करें, लेकिन मैं ** BoundFieldModule ** कक्षा और ** @ बाइंड ** एनोटेशन को हल नहीं कर सकता। – Nikolas

+1

@ निकोलस: आप अपने परीक्षण में एक अज्ञात 'सार मॉड्यूल' उप-वर्ग बनाकर वही काम कर सकते हैं, बेशक - 'बाउंडफ़िल्ल्ड मॉड्यूल' सिर्फ एक शॉर्टकट है। (यदि यह आपके प्रोजेक्ट में उपलब्ध नहीं है, तो हो सकता है कि आप गुइस को नवीनतम संस्करण में अपग्रेड करना चाहें।) उत्तर का महत्वपूर्ण हिस्सा यह है कि आपकी निर्भरता सही है यह सुनिश्चित करने का सबसे अच्छा तरीका है कि आप अपने परीक्षण में 'इंजेक्टर' बनाएं, और सत्यापित करें कि यह अपेक्षित के रूप में काम करता है। –

संबंधित मुद्दे