2013-06-20 15 views
9

मैं Android एप्लिकेशन पर काम कर रहा हूं और मैं निर्भरता इंजेक्शन के लिए Dagger का उपयोग कर रहा हूं।Robolectric टेस्ट में डैगर मॉड्यूल ओवरराइड

मैं अब एक टुकड़ा है जो इन निर्भरता में से एक है परीक्षण करने के लिए कोशिश कर रहा हूँ, चलो यह ProductsService फोन करते हैं।

मेरी Robolectric परीक्षण में मैं एक परीक्षण मॉड्यूल ProductsService ओवरराइड करता है होने के रूप में जहाँ तक मिल गया है: (के रूप में यहाँ How can I test fragments with Robolectric? देखा)

@Module(
     includes = ProductsModule.class, 
     injects = { 
       Fragment.class, 
       FragmentTest.class 
     }, 
     overrides = true 
) 
static class MockProductsModule { 
    @Provides 
    @Singleton 
    public ProductsService providesProductsService() { 
     return Mockito.mock(ProductsService.class); 
    } 
} 

अपने परीक्षण में आदेश मेरे टुकड़ा चलाने के लिए मैं इसे इस प्रकार का निर्माण में,

 FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class) 
      .create() 
      .start() 
      .resume() 
      .get(); 

    FragmentManager fragmentManager = activity.getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(fragment, null); 
    fragmentTransaction.commit(); 

समस्या है, इस निर्माण के दौरान यह कॉल Dagger के लिए बनाता है यह निर्भरता है को पूरा करने के:

((MyApplication)getActivity().getApplication()).inject(this); 

MockProductsModule का उपयोग करने के लिए, मैं अपने परीक्षण में घोषित करने के लिए, जब टुकड़ा बनाया गया है, तो ऑब्जेक्ट ग्राफ़ को ओवरराइड कैसे कर सकता हूं?

उत्तर

12

मैं तुम्हें Application.onCreate() में वस्तु ग्राफ पैदा कर रहे लगता है। यदि ऐसा है और यदि आप Robolectric 2 का उपयोग कर रहे हैं, तो आप एक परीक्षण अनुप्रयोग बना सकते हैं जैसा कि here समझाया गया है और अपने परीक्षण मॉड्यूल के साथ अपने परीक्षणों के लिए ऑब्जेक्ट ग्राफ़ बनाएं (प्रोड और टेस्ट एप्लिकेशन को उसी बेस क्लास से प्राप्त होना चाहिए)। इस पर अधिक जानकारी के लिए, आप here देख सकते हैं। आशा करता हूँ की ये काम करेगा।

+0

अच्छा सुझाव। मैंने ग्राफ ऑब्जेक्ट को इंजेक्ट करने के लिए एक विधि बनाई और परीक्षणों में इसका इस्तेमाल किया लेकिन आपके समाधान में गंध डिज़ाइन की कमी नहीं है (लेकिन गंध परीक्षणों की कमी है :))। धन्यवाद! –

+0

वैसे यह मेरा समाधान नहीं है, स्क्वायर दोस्तों के लिए धन्यवाद कहें;) – futtetennista

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