Dagger では、UI スレッドに注入する必要があります。JUnit を実行しているときは、UI スレッドで実行していません。これを機能させるには、Runnable を UI スレッドに投稿し、注入が完了するまで待つ必要があります。
私のコードは次のようになります。
public void inject(final Object object) {
// We always has to inject on the main thread.
final CountDownLatch latch = new CountDownLatch(1);
Handler mainHandler = new Handler(FodoApplication.getAppContext().getMainLooper());
Runnable myRunnable = new Runnable() {
public void run() {
objectGraph.inject(object);
latch.countDown();
}
};
mainHandler.post(myRunnable);
try {
latch.await();
} catch (InterruptedException e) {
Log.e(TAG, "", e);
}
}
問題は、latch.await() を呼び出したときに myRunnable が開始されないことです。JUnit の実行時に Dagger に注入させる最良の方法は何ですか?