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

Ios 使用Swift在Xcode中进行异步UI测试,ios,swift,xcode,unit-testing,testing,Ios,Swift,Xcode,Unit Testing,Testing,我正在编写一个可以发出大量网络请求的应用程序。像往常一样 异步,即请求方法的调用立即返回结果 延迟后通过委托方法或在闭包中交付。 现在在我的注册屏幕上,我向我的后端发送了一个注册请求,然后 要验证请求完成时是否显示成功UI 等待请求完成的选项有哪些,请验证 成功的用户界面,只有在那之后才离开测试方法 还有比等待请求完成更聪明的选择吗 提前谢谢 琐碎的方法 苹果在Xcode 9/ios11中进行了重大改进,使您能够等待UI元素的出现。您可以使用以下一个衬里: .waitForExistence(超

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

等待请求完成的选项有哪些,请验证 成功的用户界面,只有在那之后才离开测试方法

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


提前谢谢

琐碎的方法

苹果在Xcode 9/ios11中进行了重大改进,使您能够等待UI元素的出现。您可以使用以下一个衬里:

.waitForExistence(超时:5)
高级方法

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

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

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

  • 服务器问题
  • 连接速度
  • 网络限制
通过这种方式,您可以非常快速地运行测试,从而更频繁地运行测试,这是编写代码(“测试驱动开发”)的一种好方法

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

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

我希望这能帮助我的一些同事。如果你需要更多关于这个话题的指导,不要犹豫,回复这篇文章

西娅