대거를 사용하여 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