AndroidアプリでDagger2を使用しています。基本的にはHttpClient(インターフェース)を に注入しますMainActivity。
@Module
public class MainActivityModule{
@Provides public HttpClient providesHttpComponent(){
return new RealHttpClient();
}
}
@Component( modules = MainActivityModule.class )
public interface MainActivityComponent {
public MainActivity injectActivity(MainActivity);
}
public class MainActivity extends Activity {
public void onCreate(Bundle saved){
super.onCreate();
injectDependencies();
}
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent( new MainActivityModule())
.build()
.injectActivity(this);
}
}
これまでのところ、期待どおりに動作します。今、代わりにMainActivity使用したい場所のユニットテスト(アンドロイドインストルメンテーションテストではない)をいくつか書きたいと思います。TestMainActivityModuleMainActivityModule
@Module (overrides = true )
public class TestMainActivtiyModule extends MainActivityModule {
@Provides public HttpClient(){
return new MockHttpClient();
}
}
私の質問は:の代わりに強制的MainActivityに使用するにはどうすればよいですか? そのための良い解決策はありますか?TestMainActivitiyModuleMainActivityModule
私の現在のアプローチは、継承を使用してオーバーライドするgetModule()ことです。
public class TestMainActivity extend MainActivity {
@Override
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent( new TestMainActivtiyModule())
.build()
.injectActivity(this);
}
}
TestMainActivityの代わりに単体テストを実行しますMainActivity。
うまくいくと思いますが、このアプローチで直面している問題の1つは、で指定できないため、から始めることができないことTestMainActivityですIntentAndroidManifest.xml
Androidでdagger2を使用した単体テストのより良いアプローチを知っている人はいますか?