ios - 如何用模拟和预定义的答案替换异步调用?

标签 ios objective-c unit-testing ocunit ocmock

我有一个简单的类来执行网络的东西。它是一个单例,它封装了 NSOperationQueue在里面。当类的用户调用某个方法从网络获取数据时,该类创建了继承自 NSOperation 的操作类的正确实例。设置它并添加到执行队列中。显然,这种执行是在分离的线程中异步进行的。从网络获取数据后NSOperation继承的对象通知我的网络类,并通知感兴趣的代表数据完成或错误。

问题是,如何进行单元测试来检查网络类的逻辑?另外,我实际上并不想测试服务器端的行为。我只想用模拟和预定义的答案替换对服务器的实际异步调用,以测试处理程序的行为。我想检查我的类(class)是如何工作的,而不是服务器端。我了解测试此类东西的常见逻辑,但我对使用 OCMock 有点困惑。
最佳答案将是代码示例。我在我的项目中使用 OCUnit 和 OCMock 进行单元测试。

此外,任何文章或 github 链接都是完美的。

最佳答案

如果所有异步调用都通过您的类中的内部方法,您可以简单地在您的对象上创建一个部分模拟并在该方法上使用 stub /预期。然后,您可以正常调用公共(public)方法并使用模拟来验证是否调用了内部方法。使用部分模拟会阻止调用真正的实现,因此不应发生网络事件。

至于另一半,来自异步操作的回调,只需调用将直接从您的测试中调用的方法,然后通过使用 OCUnit 断言检查其状态来检查您的类是否正确,或者,如果它反过来使用回调,以及另一个模拟。

关于ios - 如何用模拟和预定义的答案替换异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16875434/

相关文章:

ios - 无法在 iOS 中找到图像的 DPI

ios - 在 setVisibleMapRect 上保留 map View 相机间距(3d 角度)

reactjs - 未从 react-testing-library 中的 .toHaveBeenCalledTimes() 获得预期结果

java - 读取包含输入值的文件并使用结果生成 .out

java - 如何避免 Mockito 和 PowerMockito 之间的冲突?

ios - 是否可以从字符串声明变量类型?

ios - 使用对象的 Swift 二维数组初始化

javascript - iPhone/iPad 视角在纵向和横向上发生变化

ios - 带有 Core Graphics 的内阴影

iOS - 检查文件是否存在 Dropbox Sync API iOS SDK