在我的iOS
应用程序中,当API calls
由于网络不佳而失败时,应用程序将显示No network error screen
。我必须检查这个错误屏幕是否正确显示或不在网络差的情况下,在自动化测试使用模拟器。但我找不到任何可能性关闭互联网手动在模拟器和检查是否No network
屏幕显示。
我在MacOS
中安装了Network Link Conditioner
,并尝试在simulator
上使用它。但是,在simulator settings -> developer
中,没有名为Network Link Conditioner
的部分来处理模拟器中的这个问题。那么,在模拟器中是否有其他解决方案来处理此网络情况?
我试图使手动网络差,并期待,如果错误屏幕是可见的正确.但是在iOS simulator
中,没有turn off internet
的选项。
1条答案
按热度按时间kr98yfug1#
这是模拟外部依赖的经典案例。如果您的应用程序在开发时考虑到了这一点,并实现了inversion of control(有时称为“依赖注入”),那么您可以相对容易地实现您在测试中所要求的效果。测试计划是这样的:
1.您必须针对某个条件进行池化,或者侦听某个事件,以确定网络何时处于较差或正常速度。我们称之为
NetworkConditionsDetector
。当这个NetworkConditionsDetector运行时,它为下游消费者生成一个事件,以便他们可以显示错误消息,正如您在问题中所解释的那样。确保NetworkConditionsDetector包含在协议中(也称为接口)。我们将此协议命名为NetworkConditionsDetectorProtocol
,它也具有与NetworkConditionsDetector相同的功能需求。1.确保在视图控制器或其他任何地方引用
NetworkConditionsDetectorProtocol
而不是NetworkConditionsDetector。1.当视图控制器显示错误对话框时,您需要将该协议注入其中。或者通过视图控制器的构造函数,或者通过setter注入技术。
1.现在,在测试中,您可以替换实现
NetworkConditionsDetectorProtocol
的另一个对象。这叫嘲笑将这个“mock”对象注入到正在测试的视图控制器中。因为这个对象是你可以控制的,所以你现在可以随意生成事件来测试你的视图控制器的功能。