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