【问题标题】:How to test a CursorLoader with AndroidJUnitRunner and JUnit4?如何使用 AndroidJUnitRunner 和 JUnit4 测试 CursorLoader?
【发布时间】:2015-09-10 18:59:55
【问题描述】:

我正在尝试使用新的 AndroidJUnitRunner 和 JUnit4 for android,我所有的 espresso 测试都很容易转换,但现在我的加载器测试无法正常工作。我的加载器需要一个处理程序,它需要 UiThread,加载器接口没有任何方法可以同步请求它。

@UiThreadTest
@Test
public void testContactLoader() {
    ContactLoader loader = new ContactLoader(InstrumentationRegistry.getTargetContext());
    Cursor = getLoaderResultSynchronously(loader); // I don't know how to implement this function
    // assert stuff
}

有人做过吗?我看到了一个奇怪的实现here,但我不确定它是如何工作的。

【问题讨论】:

    标签: java android testing junit loader


    【解决方案1】:

    我在测试返回游标加载器的方法时遇到了类似的问题。在该方法内部,它在 new CursorLoader() 上崩溃,并出现错误“无法在未调用 looper.prepare() 的线程内创建处理程序”。在测试方法中,在调用返回游标加载器的方法之前调用 Looper.prepare() 解决了问题。

    编辑:为了确保 Looper.prepare() 只被调用一次,首先检查它是否为空。如果为空,则表示尚未准备好。我将它放在每个使用游标加载器的类的设置中。

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        if (Looper.myLooper() == null) {
            Looper.prepare();
        }
    }
    

    【讨论】:

    • 我最终只是试图使用 RxJava 一起摆脱加载器。我会看看 Looper.prepare() 是否有效。我以为你只能调用它一次,否则它会抛出异常,这就是为什么我认为这行不通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2019-12-11
    • 2013-01-16
    相关资源
    最近更新 更多