gpt4 book ai didi

android - 使用永无止境的 AsyncTask 进行 Espresso 测试

转载 作者:行者123 更新时间:2023-11-29 14:12:52 26 4
gpt4 key购买 nike

我正在尝试在我的应用程序中的真实条件下运行 Espresso 测试。问题是测试永远不会运行,因为 Espresso 无法检测空闲状态以将其事件注入(inject)队列。因此它挂起并以已知的 ASYNC_TASKS_HAVE_IDLED 错误结束。

为什么会这样?

应用程序正在使用 SignalR 库,它在应用程序启动时被初始化。 "Library GitHub url" .该库创建多个长轮询连接,以便向/从服务器发送和接收各种消息和事件。

这些连接是用 AsyncTask ( class url ) 实现的,因为它们很少结束(当它们结束时,它们会立即重新启动),Espresso 几乎没有机会检测到 idle 声明并继续执行。

那么,这个问题有什么解决方法吗?我真的因此而被迫切换到 UIAutomator 吗?

注意事项:

  • 禁用 SignalR 不是一个选项(尝试过,测试有效,但后来我错过了应用程序的重点)
  • 模拟 SignalR 也不是一种选择。我想测试真实数据。

感谢您的宝贵时间。

最佳答案

我也有很多Async。我的应用程序上的任务..所以我做的是:

  1. 已注册闲置资源。
  2. 在我需要停止/等待时将其设置为 false。
  3. 在我想继续时实现它。
  4. 但是当有很多电话时,这将不起作用。否则它在我的简单案例中工作正常。

@Before
public void registerIdlingResource() {
Utils.idle = true;
mIdlingResource = mActivityRule.getActivity().getIdlingResource();
Espresso.registerIdlingResources(mIdlingResource);

}

-----------------------------

@After
public void unregisterIdlingResource() {
if (mIdlingResource != null) {
Espresso.unregisterIdlingResources(mIdlingResource);
}
}


-------------------
signIn();
Utils.idle = false;
onView(withId(R.id.ll_reports)).perform(click());
Utils.idle = false;

登录方法后,我会等到邮件页面加载完毕。然后单击 ID 为 ll_reports 的布局。然后我再次等待我要执行的下一个任务。

关于android - 使用永无止境的 AsyncTask 进行 Espresso 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47238307/

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