如何在iOS测试中实际使用存根或模拟对象?

3

我的问题有两个部分。

第一,我只对iOS中的测试知道一些基础,并且正在尝试学习何时使用模拟。据我所知,模拟对象是模拟假对象的仿真,当访问该对象很困难时(例如查询数据库或不可预测的情况)。您能举一个简单的例子来解释如何模拟数据库的行为吗?

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

1个回答

5

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

  • 创建一个假的对象
  • 将方法设置为返回预先确定的响应
  • 验证某个方法是否使用了特定的参数进行了调用

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

下一步你需要的是将存根/模拟对象传递到它们被调用的位置。这可以通过依赖注入实现。理想情况下,你应该将它们传递到对象的初始化程序中 - 测试应该传递假对象,生产代码应该传递真实的对象。
然后每个测试都应该设置一个单独的场景。例如,你可以假装使用各种参数获得有效的JSON数据。你可以假装获得各种错误响应。

1
非常感谢你。你的评论节省了我很多时间。 - Bernard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接