2

在 Dagger 中,您必须在 UI 线程上注入。运行 JUnit 时,您并未在 UI 线程上运行。为了让它工作,我们必须在 UI 线程上发布一个 Runnable 并等待它完成注入。

我的代码如下所示:

    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 注入的最佳方法是什么?

4

1 回答 1

1

您可以从 AndroidTestCase 使用此方法:http: //developer.android.com/reference/android/app/Instrumentation.html#runOnMainSync(java.lang.Runnable)

这一个也很有用:http: //developer.android.com/reference/android/test/InstrumentationTestCase.html#runTestOnUiThread(java.lang.Runnable)

于 2013-03-16T03:46:15.327 回答