3
我正在使用Dagger将依赖关系注入到Android项目中的活动中。所有供应商都保存在一个由Application
子类存储和管理的模块中。活动注入其依赖项onCreate()
,从上下文获取模块。匕首和Android - 测试中的竞争条件?
在测试中,我有时需要交换默认模块为另一个人。我正在使用ActivityAndroidTestCase2
。我得到的应用方面,我叫getActivity()
之前,则替换模块,像这样:
Context applicationContext = getInstrumentation()
.getTargetContext().getApplicationContext();
module.setAppContext(applicationContext);
Thread.sleep(1000); // note this
((ObjectGraphProvider) applicationContext).setModule(module);
的MyApplication
代码:
public class MyApp extends Application implements ObjectGraphProvider {
private ObjectGraph objectGraph;
private Object module;
public MyApp() {
super();
ApplicationContextModule myModule = new DefaultModule();
myModule.setAppContext(this);
this.module = myModule;
}
@Override
public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(module);
}
@Override
public ObjectGraph objectGraph() {
return objectGraph;
}
/* Test only */
public void setModule(Object module) {
this.module = module;
objectGraph = ObjectGraph.create(module);
}
}
可悲的是,测试失败不时 - 这是为原因第一个代码片段中的sleep()
。线程睡眠时间越长,出现故障的几率就越小,但这并不能解决问题。
是什么原因导致这种奇怪的行为,以及如何克服这个问题的任何想法?
你是什么意思时,你说,它失败了呢?它会崩溃吗,你有错误吗,有没有什么有用的logcat? – ZoFreX 2013-10-08 21:24:09