我的问题有两个部分。
第一,我只对iOS中的测试知道一些基础,并且正在尝试学习何时使用模拟。据我所知,模拟对象是模拟假对象的仿真,当访问该对象很困难时(例如查询数据库或不可预测的情况)。您能举一个简单的例子来解释如何模拟数据库的行为吗?
在我的情况下,我想测试从Facebook API的API调用接收到的JSON数据包。我想确保这些数据包不为空并且存在特定节点。最好的方法是什么?
我的问题有两个部分。
第一,我只对iOS中的测试知道一些基础,并且正在尝试学习何时使用模拟。据我所知,模拟对象是模拟假对象的仿真,当访问该对象很困难时(例如查询数据库或不可预测的情况)。您能举一个简单的例子来解释如何模拟数据库的行为吗?
在我的情况下,我想测试从Facebook API的API调用接收到的JSON数据包。我想确保这些数据包不为空并且存在特定节点。最好的方法是什么?
Stub是一个假的对象,在被调用时提供一个预设的响应。 Mock是一个假的对象,记录它被调用的方式。这就是为什么模拟对象框架(如OCMock或OCMockito)基本上让您可以:
我建议一开始不要使用模拟对象框架。相反,通过子类化NSObject并定义所需方法的子集来手动创建它们。Stub将简单地返回预设的响应。Mock将记录方法的参数。一旦你掌握了它(并且厌倦了编写样板代码),然后切换到模拟对象框架。但是通过手动创建它们,您会学到很多东西。
下一步你需要的是将存根/模拟对象传递到它们被调用的位置。这可以通过依赖注入实现。理想情况下,你应该将它们传递到对象的初始化程序中 - 测试应该传递假对象,生产代码应该传递真实的对象。