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

How to practically use Stub or Mocking objects in iOS testing?

我的问题分为两部分。

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

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

存根 是一种伪造,在调用时提供固定响应。 mock 是一个伪造的记录它是如何被调用的。这就是为什么模拟对象框架(例如 OCMock or OCMockito)基本上让你:

  • 造假
  • 存根方法return 预定响应
  • 验证是否使用特定参数调用了方法

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

接下来您需要的是一种让您的 stubs/mocks 进入他们被调用的地方的方法。这是通过 Dependency Injection 完成的。理想情况下,您将它们传递到对象的初始化程序中——测试将通过假的,生产代码将通过真实的东西。

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