我正在尝试为执行某些 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/