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

标签 android android-asynctask signalr android-espresso

我正在尝试在我的应用程序中的真实条件下运行 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/

相关文章:

android - 位置数据源 : how to jump to specific position in recycler view?

android - 在 android 中使用 Facebook SDK 共享视频时遇到问题

android - flutter-upgrade 破坏了我的应用程序

安卓 : Calling the methods on UI thread from AsyncTask doInBackground method

java - 非常基本的 Android 代码发布错误。 java.lang.RuntimeException : An error occured while executing doInBackground()

android - IntentService 的意外行为

java - 通过外部 AsyncTask 将项目添加到 Activity 中的 ListView

signalr - 如何维护服务器集线器可以调用的客户端方法列表?

c# - 需要连接 ID

azure - 客户端永远不会从生产中的 Controller .NET Core 接收来自信号中心的 SendAsync 调用消息