android - 使用 getLoader 结果同步单元测试异步任务加载器

标签 android junit android-loader

我正在尝试为执行某些 API 调用的 REST 客户端创建单元测试。客户端在实时应用程序中运行良好,但我无法让它在测试用例中运行。

显然,LoaderTestCase.getLoaderResultSynchronously() 可以在这里使用(至少根据 Android 引用,但它不会接受我的加载器。代码:

public void testGetEventInfo() {
    // Init some vars
    ...

    // Create & execute loader
    RESTLoader loader = new RESTLoader(getContext(),
            RESTLoader.HTTPVerb.GET, action, params, LOADER_GET_NEWS);
    getLoaderResultSynchronously(loader);
}

这会产生错误 getLoaderResultSynchronously(Loader) in the type LoaderTestCase is not applicable for the arguments (RESTLoader)

RESTLoader 扩展了 AsyncLoader。请注意,我使用的是 supportlibrary,也许里面的 Loader 不兼容?文档没有提供这方面的信息。

我尝试了多种方法来解决这个问题,但似乎都不起作用:

  • 注册了加载程序的监听器。但是,回调永远不会触发
  • 使用 CountdownLatch(也有监听器)。同样,没有触发/倒计时超时。
  • 尝试使用类型模板 (),但没有成功。
  • 关于 SO 的类似解决方案,但同样无法传达给听众。

有人知道为什么 getLoaderResultSynchronously 不接受加载程序吗?或者另一种测试加载程序的干净方法,包括测试返回数据的方法?我可以在单独的案例中测试处理返回数据,但我也想测试实际数据。

此致

最佳答案

你看过source code了吗? ?您会发现以下导入语句:

import android.content.Loader;
import android.content.Loader.OnLoadCompleteListener;

Android 似乎没有为 LoaderTestCase 提供支持版本。最简单的解决方案是暂时更改为不支持的 LoaderManager(也就是说,让您的类使用 android.content.Loader),测试您的应用,然后切换回支持实现。您也可以考虑将测试源代码复制到您的项目中,导入支持的LoaderManager,然后直接执行。我不熟悉 Loader 的测试库,但从表面上看这不会导致任何重大问题。

关于android - 使用 getLoader 结果同步单元测试异步任务加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11361158/

相关文章:

android - 如何使用 CursorLoader 进行多个串行数据库查询

java - BitmapFactory.decodeFile与decodeStream之间的区别

java - 如何为此编写测试用例

java - 测试两个 JSON 对象的相等性,忽略 Java 中的子顺序

android - 在开始新 Activity 、更改新 Activity 的方向并按下后退按钮后,加载程序不会保留

android - 在一个 Activity 中使用不同的 (AsyncTask) Loader

android - 替换 viewflipper android 特定索引处的子项

android - 清除android的Dhcp和dns缓存

带有折叠工具栏的 RecyclerView 中的 Android 字母快速 ScrollView

java - 如何使用 JUnit 反射测试实体注释