gpt4 book ai didi

java - 如何使用 Robolectric 测试 AsyncTask?

转载 作者:行者123 更新时间:2023-12-01 06:06:28 24 4
gpt4 key购买 nike

我使用Android-DDP我的应用程序中的库。该库实现了分布式数据协议(protocol)

我想实现一些集成测试,但我不想模拟DDP-client。我已经在同一台机器上设置了后端实例,因此我不用担心网络问题。

我从这样的测试结构开始:

@Inject
Meteor meteor;

@Test
public void testSendMessage() throws Exception {
final Object[] params = new Object[]{"example params"};//some params are build here.

final Result result = Result.empty(); //my class for tests;
final CountDownLatch latch = new CountDownLatch(1);
meteor.call("send_message", params, new ResultListener() {
@Override
public void onSuccess(String result) {
result.setSucess(result);
latch.countDown();
}

@Override
public void onError(String error, String reason, String details) {
result.setError(error, reason, details);
latch.countDown();
}
});
latch.await(); // here we block the main thread, and callback will not be called because of it.

//here goes some assertions, but they will never call.
}

但是回调从未被调用。经过一番小调查,我发现在幕后, ddp-client 使用 AsyncTask 来执行后台操作并将回调传递给客户端代码。

由于AsyncTask.onPostExecute始终在主线程上调用,因此我无法从回调中获取调用:测试 block 主线程直到调用回调,但回调永远不会被调用,因为AsyncTask.onPostExecute是在主线程上调用的(被测试阻止)

因此,为了解决问题,我需要在不同的线程中运行 testsAsyncTask.onPostExecute,或者以某种方式不阻止线程来测试结果。这可以吗?

最佳答案

关于java - 如何使用 Robolectric 测试 AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43480024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com