使用永不停止的AsyncTask进行Espresso测试

时间:2017-11-11 13:17:32

标签: android android-asynctask signalr android-espresso

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

为什么会这样?

应用程序正在使用SignalR库,并在应用启动时初始化。 "Library GitHub url"。此库创建多个长轮询连接,以便向/从服务器发送和接收所有类型的消息和事件。

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

那么,这个问题是否有一些解决方法?我真的被迫切换到UIAutomator吗?

注意:

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

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我也有很多异步。我的应用上的任务.. 所以我所做的是:

  1. 已注册的闲置资源。
  2. 当我需要停止/等待时做错了。
  3. 当我想继续时,这是真的。
  4. 但是当有很多电话时,这不会起作用。否则它在我的简单案例中工作正常。
  5. @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点击我的布局。然后我再次等待我想要执行的下一个任务。