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
使用したい場所のユニットテスト(アンドロイドインストルメンテーションテストではない)をいくつか書きたいと思います。TestMainActivityModule
MainActivityModule
@Module (overrides = true )
public class TestMainActivtiyModule extends MainActivityModule {
@Provides public HttpClient(){
return new MockHttpClient();
}
}
私の質問は:の代わりに強制的MainActivity
に使用するにはどうすればよいですか? そのための良い解決策はありますか?TestMainActivitiyModule
MainActivityModule
私の現在のアプローチは、継承を使用してオーバーライドするgetModule()
ことです。
public class TestMainActivity extend MainActivity {
@Override
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent( new TestMainActivtiyModule())
.build()
.injectActivity(this);
}
}
TestMainActivity
の代わりに単体テストを実行しますMainActivity
。
うまくいくと思いますが、このアプローチで直面している問題の1つは、で指定できないため、から始めることができないことTestMainActivity
ですIntent
AndroidManifest.xml
Androidでdagger2を使用した単体テストのより良いアプローチを知っている人はいますか?