单元测试— KIF和FBSnapshot

自从我谈论单元测试以来已经有一段时间了,在我们的应用程序和测试框架(如Quick和Nimble)中编写它们的重要性。 测试可以帮助我们保持功能正常运行,并避免新功能破坏旧功能。 我今天在这里谈论一个新框架:KIF。

这篇文章对KIF,优点,缺点,何时使用它以及一个示例进行了思考。

是一个单元测试框架,可帮助开发人员创建UI测试(是的,UI测试)并测试您的应用程序流,例如整个登录过程,例如,如果用户触摸键盘时键盘消失,则输入有效凭据,轻扫tableView单元格,当无效用户名的警报弹出。 它是用objc编写的,使用XCTestCase,但是如果您想将它与Quick一起使用,则可以使用KIF-Quick。

它带来了有助于执行事件的功能,如tap()swipeLeft()swipeLeft() 。 使用accessibility来标识要与之交互的对象,例如,您可以使用其accessibilityIdentifieraccessibilityLabel检索对象,然后使用tap()执行操作

viewTester().usingIdentifier("btn_login").tap()

您应该问自己-如果Apple提供了一个不错的UI测试框架,为什么我应该使用KIF-答案很简单:模拟! 通过KIF,您可以注入模拟对象来创建应用程序的强大本地测试流,换句话说,您可以自由模拟服务响应并测试整个应用程序流,而无需Internet连接,API响应甚至数据量。

哇! 那很棒。 那么,为什么我应该编写单元测试(如果KIF可以处理更多)? 这是个好问题! 的确,KIF可以处理单元测试以及更多内容,但是它需要在模拟器上运行并且需要时间。 因此,如果您决定仅使用KIF编写测试,则运行这些代码所花费的时间将比单项单元测试多得多。

如何使用它

通过cocoapods,KIF的安装过程很容易,只需将pod KIF添加到您的podfile运行pod install并完成。 KIF是用Obj-C编写的,因此您需要创建一个桥接头并向其中添加KIF。

#import

在此示例中,我们将测试带有成功和失败案例的简单登录流程。 将KIF和Snapshot的功能结合在一起(如果您不知道什么是Snapshot,则应该阅读此内容),我们将验证所有UI。

如果用户输入正确的值(在这种情况下,用户名是“ user”,密码是“ 123123”),则将显示主屏幕,否则将显示警告错误。

不要忘记测试目标并在将要交互的每个UI对象中设置可访问性标签。

DefaultFlowSpec测试

在此文件中,我们创建一个窗口,从情节viewController检索初始viewController并将其添加为窗口的rootViewController 。 之后,我们需要测试我们的成功和失败流程。

成功流程

我们的成功流程基于正确的投入。 首先,用户将在用户123123中设置user123123在密码字段中设置123123 ,我们现在要检查UI,然后单击login按钮并检查是否显示了homeScreen

成功流程

失败流程

在失败流程中,我们将按login按钮,检查是否显示错误警报,对警报按ok ,然后检查警报是否消失。

失败流程

结论

最好的方法是将单元测试和KIF结合起来以获得快速而完整的测试。 继续使用单元测试来测试您的方法和功能,这会更快。 使用KIF测试UI和MVC架构中模型,视图和控制器等层之间的连接。

我写了一些文章,展示了如何实现一些单元测试。

  • 第1部分-具有Nimble + Snapshots的UIViews
  • 第2部分-单元测试-JSON的解析
  • 第3部分-单元测试-网络请求
  • 第4部分-单元测试-UITableView

附:如果您喜欢这篇文章,请在Twitter上分享,或在中级推荐,或两者都=)。 这确实有助于我吸引更多人。 非常感谢。