我在我的 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
现在我想为我想使用的地方编写一些单元测试(不是 android 仪器测试),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
。
我想它有效,但我在使用这种方法时面临的一个问题是我不能从TestMainActivity
an 开始,Intent
因为我无法在AndroidManifest.xml
有谁知道在 android 上使用 dagger2 进行单元测试的更好方法?