如何在UI测试自动化中检查iOS模拟器中没有网络情况

How to check no network cases in iOS simulator in UI testing automation

提问人:Wasim Akram 提问时间:10/16/2023 最后编辑:XildriteWasim Akram 更新时间:10/17/2023 访问量:52

问:

在我的应用程序中,当由于网络不佳而失败时,应用程序将显示。在使用模拟器进行自动化测试时,我必须检查此错误屏幕是否正确显示,以防网络不良。但是我找不到任何在模拟器中手动关闭互联网并检查屏幕是否显示的可能性。iOSAPI callsNo network error screenNo network

我安装并尝试使用它。但是,在 中,没有调用部分来处理模拟器中的此问题。那么,有没有其他解决方案可以在模拟器中处理这种网络情况?Network Link ConditionerMacOSsimulatorsimulator settings -> developerNetwork Link Conditioner

我试图手动使网络变差,并期望如果错误屏幕正确可见。但是在 中,没有选项。iOS simulatorturn off internet

ios ios-simulator xcode-ui-testing xcuitest

评论


答:

0赞 deniz 10/17/2023 #1

这是模拟外部依赖的经典案例。如果你的应用程序在开发时考虑到了这一点,并实现了控制反转(有时称为“依赖注入”),那么你可以相对容易地实现你在测试中所要求的效果。测试计划是这样的:

  1. 您必须为某个条件进行池化或侦听事件,以确定网络何时较差或速度正常。我们称之为 .当此 NetworkConditionsDetector 运行时,它会为下游使用者生成一个事件,以便他们可以显示错误消息,如您在问题中所述。确保 NetworkConditionsDetector 包装在协议(也称为接口)中。让我们给这个协议命名,它也具有与 NetworkConditionsDetector 相同的功能要求。NetworkConditionsDetectorNetworkConditionsDetectorProtocol
  2. 请确保在视图控制器或其他任何位置引用而不是 NetworkConditionsDetector。NetworkConditionsDetectorProtocol
  3. 无论哪个视图控制器显示错误对话框,您都需要将该协议注入其中。通过该视图控制器的构造函数通过 setter 注入技术。
  4. 现在,在测试中,您可以替换另一个实现 .这称为模拟。将该“模拟”对象注入到正在测试的视图控制器中。由于这个其他对象是由您控制的,因此您现在可以随意生成事件来测试视图控制器的功能。NetworkConditionsDetectorProtocol