单元测试—具有Nimble + Snapshot的UIView

大家好,我目前正在撰写一系列文章,展示如何为iOS编写某种测试,这是第一篇。

在上一篇文章中,我谈到了TDD和一些测试框架,这些框架在讨论iOS平台上的测试时对我有很大帮助。 在这里,我们将看到如何对XIB文件创建的UIView进行单元测试,或使用制图通过代码对UIView进行单元测试。

如果您想了解有关制图的更多信息并查看代码,可以在这篇文章中查看。 现在让我们了解测试!

设置您的项目

首先,我们需要在项目上安装Quick,Nimble和Nimble + Snapshot。 您可以通过将Podfile pod 'Nimble-Snapshots'Podfile pod 'Nimble-Snapshots'PodfilePodfile 。 不要忘记在测试目标上设置这些框架,如果没有框架,则可以在项目中创建一个新框架。 为此,您可以选择项目->目标-> +-> iOS单元测试包,并为其命名。

您的Podfile应该如下所示:

我们的swift文件只是一个简单的UIView自定义类:

使用查看代码

现在,让我们使用视图代码创建相同的测试。 首先,创建新的UIView自定义类文件,添加两个UITextField和一个UIButton并使用制图添加约束。

就像我们之前使用XIB进行的测试一样,这些屏幕截图将在您的项目文件夹中创建。 您可以随时检查它们。

Nimble + Snapshot如何工作?

您可能会问我-我怎么知道我何时打破观点或我打破了什么? Nimble + Snapshot会创建差异屏幕截图,而在您破坏测试时会失败。 让我们以实际的方式来看一下。

让我们注释一下我们的textFieldDidChange()方法以删除隐藏/显示行为。

如果您查看日志(可以按png过滤),Nimble + Snapshot会打印失败测试图像的路径。 打开Finder->转到->转到文件夹(Cmd + Shif + G)并粘贴路径。 路径类似于:/ /Users/youruser/Library/Developer/CoreSimulator/Devices/adeviceid/data/Containers/Application/anapplicationid/tmp/LoginViewTests/failed_LoginView_should_show_loginButton_if_user_set_username_and_password@2x.png

该文件夹包含三个图像:引用,失败和差异。 根据这些图像,您可以查看代码中的错误并进行修复。

测试UIView是了解您在编码时是否破坏某些东西或代码是否按预期运行的好方法。 如您所见,我们不需要编写测试来验证显示/隐藏行为,我们通过快照视图进行检查。

如果您想了解有关Snapshot和UITesting的更多信息,可以在realm.io上查看此演讲。