如何在 iOS 测试中实际使用 Stub 或 Mocking 对象?

Ber*_*ard 3 unit-testing mocking stubs ios

我的问题有两个部分。

首先,我了解 iOS 测试的基本知识,并且我正在尝试学习如何使用模拟。据我所知,模拟对象是在难以访问该对象(例如查询数据库或不可预测的情况)时对假对象的模拟。您能解释一个如何模拟数据库行为的简单示例吗?

在我的情况下,我想测试从 Facebook API 的 API 调用收到的 JSON 数据包。我想确保这些数据包不为空并且特定节点存在。测试这个的最佳方法是什么?

Jon*_*eid 5

存根是一个假的,它在被调用时提供预设的响应。模拟是一个假的,记录了它是如何被调用的。这就是为什么模拟对象框架(例如OCMockOCMockito)基本上可以让您:

\n\n
    \n
  • 创建一个假的
  • \n
  • 存根一个方法以返回预定响应
  • \n
  • 验证使用特定参数调用方法
  • \n
\n\n

我建议首先不要使用模拟对象框架。相反,通过子类化 NSObject 并定义所需方法的子集来手动创建它们。存根只会返回预设的响应。模拟将记录方法的参数。一旦掌握了它的窍门(并且厌倦了编写样板代码),然后切换到模拟对象框架。但通过手工操作你会学到很多东西。

\n\n

接下来您需要的是一种将存根/模拟放入调用它们的位置的方法。这是通过依赖注入完成的完成的。理想情况下,您将它们传递到对象的初始化程序 \xe2\x80\x94 中,测试将通过假的,生产代码将通过真实的东西。

\n\n

然后每个测试应该设置一个场景。例如,您可以假设您获得了具有各种参数的有效 JSON。您可以假装收到各种错误响应。

\n