2013-06-20 16 views
9

Bir Android uygulamasında çalışıyorum ve bağımlılık enjeksiyonu için Dagger kullanıyorum.Robolectric Tests'de Hançer Modülünü Geçersiz Kılma

Şimdi bu bağımlılıklardan birine sahip bir parçayı denemeye çalışıyorum, buna ProductsService diyelim. Benim Robolectric testinde

Ben ProductsService geçersiz kılan bir test modülüne sahip kadarıyla var: (burada How can I test fragments with Robolectric? görüldüğü gibi) aşağıdaki gibi bunu inşa benim fragman çalıştırabilmek için, benim testte

@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(); 

sorun, bu oluşturma sırasında o bağımlılıkları var tatmin etmek Dagger çağrı yapar edilir

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

Parça oluşturulduğunda oluşturulan nesne grafiğini nasıl geçersiz kılarım, testimde bildirdiğim MockProductsModule numarasını kullanmak için nasıl kullanırım?

cevap

12

Application.onCreate()'da nesne grafiğini oluşturuyorsunuzdur. Bu durumda ve Robolectric 2 kullanıyorsanız, here açıklandığı gibi bir test uygulaması oluşturabilir ve test modüllerinizle testleriniz için bir nesne grafiği oluşturabilirsiniz (ürün ve test uygulamasının aynı temel sınıftan miras alınması gerekir). Bu konuda daha fazla bilgi için, here bir göz atabilirsiniz. Umarım yardımcı olur.

+0

Güzel öneri. Grafik nesnesini enjekte etmek için bir yöntem yaptım ve bunu testlerde kullandım ama çözümünüzün koku tasarımında sakıncaları yok (ama koku testlerinin sakıncaları var :)). Teşekkür ederim! –

+0

Peki bu benim çözümüm değil, Kare adamlara teşekkür et;) – futtetennista