【问题标题】:Asynchronous UI Testing in Xcode With Swift使用 Swift 在 Xcode 中进行异步 UI 测试
【发布时间】:2018-08-02 21:52:24
【问题描述】:

我正在编写一个发出大量网络请求的应用程序。像往常一样,他们是 async,即请求方法的调用立即返回结果 通过委托方法或在延迟后的闭包中传递。 现在在我的注册屏幕上,我向我的后端发送了一个注册请求,然后 想要验证请求完成时是否显示成功 UI。

有哪些选项可以等待请求完成,请验证 成功的用户界面,然后才离开测试方法?

还有比等待请求完成更聪明的选择吗?

提前致谢!

【问题讨论】:

    标签: ios swift xcode unit-testing testing


    【解决方案1】:

    简单的方法

    Apple 在 Xcode 9 / iOS 11 中实现了重大改进,使您能够等待 UI 元素的出现。您可以使用以下单线:

    <#yourElement#>.waitForExistence(timeout: 5)
    

    高级方法

    一般而言,UI 和单元测试(此处称为测试)必须尽可能快地运行,这样开发人员才能经常运行它们,而不会因每天多次运行缓慢的测试套件而感到沮丧。在某些情况下,(内部或与安全相关的)应用程序可能会访问只能从某些网络/IP 范围/主机访问的 API。此外,大多数 CI 服务都提供了非常糟糕的硬件和有限的互联网连接速度。

    出于所有这些原因,建议以不执行实际网络请求的方式实施测试。相反,它们使用假数据运行,即所谓的固定装置。一个聪明的开发人员以一种可以使用像布尔属性这样的简单开关来切换数据源的方式来实现这个测试套件。此外,当开关设置为获取真实的后端数据时,可以自动从后端刷新/记录灯具。这样就很容易更新虚假数据并快速检测 API 的变化。

    但这种方法的主要优点是速度。您的测试不会发出真正的网络请求,而是针对使它们独立的本地数据运行:

    • 服务器问题
    • 连接速度
    • 网络限制

    通过这种方式,您可以更快地运行测试,从而更频繁地运行测试 - 这是编写代码的好方法(“测试驱动开发”)。

    另一方面,您不会再立即检测到服务器更改,因为假数据不会在后端数据更改时发生更改。但这可以通过使用您实现的开关简单地刷新您的装置来解决,因为您是一个聪明的开发人员,这使得这个问题成为您可以告诉您的孩子的故事!

    但是等等,我忘了一件事!为什么这可以替代上面的琐碎方法-您会问吗?简单的!由于您使用立即可用的本地数据,您也可以立即调用完成处理程序。因此,在发出请求和验证您的成功 UI 之间没有延迟。这意味着您无需等待,这使您的测试更快!

    我希望这对我的一些同事有所帮助。如果您需要有关此主题的更多指导,请不要犹豫并回复此帖子。

    哇!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多