【问题标题】:How to use Espresso Idling Resource如何使用 Espresso 空闲资源
【发布时间】:2015-03-24 18:49:57
【问题描述】:

场景是当用户点击“下载”按钮时,数据(音乐/图像等)开始从互联网下载。下载完成后,按钮将其标签文本更改为“打开”。然后用户点击那个“打开”按钮。到目前为止我所做的是:

onView(allOf(withId(R.id.button),withText("Download"))).check(matches(isClickable())).perform(click());
try {
    Thread.sleep(delayedTime);
} catch (InterruptedException e) {
    e.printStackTrace();
}
onView(allOf(withId(R.id.button),withText("Open"))).check(matches(isClickable())).perform(click());

有时测试通过,有时不通过。有时失败的原因是"No views in hierarchy found matching: (with id: something:id/button and with text: is "Open"). 而且我知道在 Espresso 中使用 Thread.sleep 也是不好的做法。我已经阅读了有关 Espresso's Idling Resource 的信息,但这对我来说没有意义,我不知道如何在这种特殊情况下应用它。

【问题讨论】:

  • 对于 ThreadPools,尝试使用这个:luongbui.com/thread-pool-idlingresource-for-espresso 我已经放了一个完整的例子来展示如何使用我的 IdlingResource,只需在测试代码中注册和取消注册它。请注意,您需要在生产代码中使用的同一个 ThreadPool 实例。强烈建议使用工厂模式或 Dagger。

标签: android android-testing android-espresso


【解决方案1】:

其实闲置资源是Espresso最难的地方。

如果在你的测试中你必须等待/同步一些异步后台任务,你应该实现它。默认情况下,Espresso 会等待当前消息队列中的 UI 操作处理完毕并等待默认 AsyncTasks(与默认 AsyncTask 线程池同步)完成,然后再进行下一个测试操作。请查看AsyncTasks。但是,如果您启动其他线程,例如与某些 Web 服务通信,您应该使用 IdlingResource

您可能需要的任何Thread.sleep() 都是您可能需要空闲资源的信号。

现在关于如何编写空闲资源。代码的开发人员很容易做到这一点,因为他们现在是如何做出这一点的评估的。

应该是这样的:

public class DownloadIdlingResource extends BaseIdlingResource { ... }

它应该定义此资源何时空闲.....

测试,想要说 Espresso 它需要等待这个空闲资源,应该在测试类初始化期间定义这个空闲资源(setUp() 等)或在需要时激活它。这意味着你有一些东西要等待,但它还没有被激活。 例如,下载的空闲资源可以有一个侦听器,在下载开始时将空闲资源设置为非空闲 (setIdle(false)),并在下载完成时设置为空闲 (setIdle(true))。如果所有空闲资源都空闲(无需等待完成),Espresso 将继续所有其他员工。 空闲资源的实现细节很大程度上取决于应用程序的实现。

关于闲置资源的一般情况:

  1. isIdleNow()实现资源空闲时的逻辑

  2. registerIdleTransitionCallback 将在资源注册时由 Espresso 调用,并为您提供 ResourceCallback

  3. 当资源从忙碌变为空闲时,实际上您会从后台任务中获得操作已完成(地图数据已下载或下载已取消)的回调,您必须在注册的ResourceCallbackcallonTransitionToIdle() .

  4. getName() 中,您必须返回用于记录的资源的名称。

请注意不要像空闲资源那样出现死锁。空闲资源超时。说明空闲资源有什么问题的消息可能会中断测试。

很抱歉无法编写更具体的示例,但这确实取决于您的应用程序实现。

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 2019-01-14
    • 2021-12-07
    • 2014-10-17
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多