Android プロジェクトのアクティビティに依存関係を挿入するために Dagger を使用しています。すべてのプロバイダーは、Application
サブクラスによって格納および管理される 1 つのモジュールに保持されます。アクティビティは依存関係を に注入しonCreate()
、コンテキストからモジュールを取得します。
テストでは、デフォルトのモジュールを別のモジュールに交換する必要がある場合があります。を使用して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()
悲しいことに、テストはときどき失敗します。それが最初のコード スニペットの理由です。スレッドがスリープする時間が長いほど、失敗の可能性は低くなりますが、問題が完全に解決されるわけではありません。
この奇妙な動作の原因と、この問題を解決する方法についてのアイデアはありますか?