我正在尝试在我的应用程序中的真实条件下运行 Espresso 测试。问题是测试永远不会运行,因为 Espresso
无法检测空闲状态以将其事件注入(inject)队列。因此它挂起并以已知的 ASYNC_TASKS_HAVE_IDLED
错误结束。
为什么会这样?
应用程序正在使用 SignalR
库,它在应用程序启动时被初始化。 "Library GitHub url" .该库创建多个长轮询连接,以便向/从服务器发送和接收各种消息和事件。
这些连接是用 AsyncTask
( class url ) 实现的,因为它们很少结束(当它们结束时,它们会立即重新启动),Espresso 几乎没有机会检测到 idle
声明并继续执行。
那么,这个问题有什么解决方法吗?我真的因此而被迫切换到 UIAutomator
吗?
注意事项:
- 禁用 SignalR 不是一个选项(尝试过,测试有效,但后来我错过了应用程序的重点)
- 模拟 SignalR 也不是一种选择。我想测试真实数据。
感谢您的宝贵时间。
最佳答案
我也有很多Async。我的应用程序上的任务.. 所以我做的是:
- 已注册闲置资源。
- 在我需要停止/等待时将其设置为 false。
- 在我想继续时实现它。
- 但是当有很多电话时,这将不起作用。否则它在我的简单案例中工作正常。
@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/