iOS模拟器不可知快照测试

随着每款配备更高分辨率屏幕的闪亮新设备的首次亮相,开发和测试iOS应用程序的用户界面变得越来越苛刻和耗时。 对于每个视图,它仅代表应用程序的一小部分,取决于它所使用的数据,可能会有几种边缘情况和状态。 与领域逻辑代码相反,如何正确测试视图的视觉方面并不明显。

自从Facebook工程师发布了一个用于UIView / CALayer快照测试的内部工具– FBSnapshotTestCase已有一段时间了(如果您不熟悉此工具,我建议您检查一下!)。 提出的方法简化了视图的多种配置的测试,并防止在用户界面中引入意外的更改。

大小很重要😉

当涉及到视图控制器时,我们通常要确保它们在每个支持的方向上在一组各种现有设备上保持视觉质量。 这可以通过在许多iOS模拟器变体上运行测试套件来实现。 这种方法将导致多次模拟器重新启动,从而延长了测试套件的总执行时间。 在开发过程中为每个UI代码更改付出如此高的代价绝对是不可接受的。 为了解决这种不便,我们开发了FBSnapshotTestCase扩展,特别喜欢在其自然栖息地中测试视图控制器。

认识SnappyTestCase

使用SnappyTestCase构建的快照测试不依赖于运行模拟器或设备的上下文。 而是为用于验证或记录快照的每个验证语句定义上下文。 通过传递一组采用Snap协议的对象来指定上下文,该对象定义了测试环境参数,例如设备标识符帧大小屏幕比例方向 。 为了方便起见,我们准备了一组定义现实生活中的iOS设备的对象,准备在您的测试中使用。 在这里,我们正在测试带有Snap ExampleViewController ,该Snap表示4英寸肖像模式iPhone的上下文:

自己尝试

所描述的工具当然是开源的code-代码和安装信息可以在我们的GitHub上找到。 我们已经准备了一个演示应用程序,其中包含一些示例测试和相应的参考图像。 欢迎反馈和贡献!