soc*_*qwe 5 junit android unit-testing dagger-2
我在我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,效果如预期.现在我想写一些单元测试(不是android仪器测试),而不是MainActivity
我想要使用TestMainActivityModule
的地方MainActivityModule
.
@Module (overrides = true )
public class TestMainActivtiyModule extends MainActivityModule {
@Provides public HttpClient(){
return new MockHttpClient();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何强制MainActivity
使用TestMainActivitiyModule
而不是MainActivityModule
?那有一个很好的解决方案吗?
我目前的方法是使用继承并覆盖getModule()
,像这样
public class TestMainActivity extend MainActivity {
@Override
protected void injectDependencies(){
Dagger_MainActivityComponent
.builder()
.mainActivityComponent( new TestMainActivtiyModule())
.build()
.injectActivity(this);
}
}
Run Code Online (Sandbox Code Playgroud)
而TestMainActivity
不是运行单元测试MainActivity
.
我想这很有效,但我遇到的问题之一就是我不能从TestMainActivity
一开始就Intent
因为我无法在AndroidManifest.xml
有没有人知道在Android上使用dagger2进行单元测试的更好方法?
我开始使用的方法涉及在并行构建变体(例如:app
和integration
)中维护两个模块(一个用于应用程序,一个用于测试)。仍然不确定该解决方案的扩展性如何,YMMV。我很高兴看到更好的解决方案!
这也是一本很好的书:http://engineering.circle.com/instrumentation-testing-with-dagger-mockito-and-espresso/
归档时间: |
|
查看次数: |
876 次 |
最近记录: |