我在我的安卓应用中使用Dagger2。基本上,我在MainActivity
中注入了一个HttpClient
(接口)。
@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
运行单元测试。
我想这可行,但是我面临的问题之一是我无法使用Intent
启动TestMainActivity
,因为我不能在AndroidManifest.xml
中指定它。
有没有人知道在android上使用dagger2进行单元测试的更好方法?