ios - 使用 Swift 在 Xcode 中进行异步 UI 测试

标签 ios swift xcode unit-testing testing

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

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

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

提前致谢!

最佳答案

简单方法

Apple 在 Xcode 9/iOS 11 中实现了重大改进,让您可以等待 UI 元素的出现。您可以使用以下一行代码:

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

高级方法

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

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

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

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

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

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

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

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

再见!

关于ios - 使用 Swift 在 Xcode 中进行异步 UI 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48937713/

相关文章:

ios - 我应该再次子类化还是可以即时更新约束?

ios - 使用 Ctrl+F 时,Xcode 在文件末尾停止,而不是重新开始

ios - 如何正确保存高分

ios - 如何在一个信号 iOS Swift 中处理可点击的推送通知

ios - UITableViewController 在具有有效数据的 reloadData 上导致 NSRangeException

ios - Xcode 数据模型编译器 - MOMC 错误 : Command momc failed with exit code 1

iphone - 如何在 iPhone 上的 UIPopoverController 中显示 NavigationController-background

ios - 将 UIImage 传递到另一个 View Controller 的 Cell

swift - 带有单例类 swift 的异步完成 block

xcode - 如何在 Xcode 中向后导航?