我的问题分为两部分。
首先,我知道在iOS中测试非常基础,我正在尝试学习何时使用模拟。据我所知,当难以访问该对象(例如查询数据库或不可预测的情况)时,模拟对象是虚假对象的模拟。你能解释一下如何模拟数据库行为的一个简单例子吗?
在我的情况下,我想测试从Facebook API的API调用中收到的JSON数据包。我想确保这些数据包不为空并且存在特定节点。测试这个的最佳方法是什么?
答案 0 :(得分:3)
存根是假的,在调用时提供预设响应。 模拟是一种记录它如何被调用的伪造品。这就是为什么模拟对象框架(例如OCMock或OCMockito)基本上让你:
我建议首先不要使用模拟对象框架。相反,通过继承NSObject并定义所需方法的子集,手动创建它们。存根将简单地返回预设响应。模拟将记录方法的参数。一旦掌握了它(并厌倦了编写样板代码),然后切换到模拟对象框架。但是你可以手工学习很多东西。
接下来你需要的是一种让你的存根/模拟进入他们被调用的地方的方法。这是通过Dependency Injection完成的。理想情况下,您将它们传递给对象的初始化程序 - 测试将传递给假的,生产代码将传递给真实的东西。
然后每个测试应该设置一个场景。例如,您可以假装您使用各种参数获得有效的JSON。您可以假装得到各种错误回复。