objective-c - 我可以使用 OCMock 来测试父类(super class)是否被调用吗?

标签 objective-c unit-testing ocmock

我做了一个 MKMapView 的子类。在单元测试中,我想知道当我调用这个子类的某个方法时,调用了相应的 MKMapView 方法以及参数的类。我可以使用 OCMock 来实现吗?

编辑:

我接受了这个答案,但我想澄清一下,我的问题是什么时候父类(super class)不能直接替代单元测试(显然是这样,因为继承就是这样工作的)。而且似乎 OCMock 和 OCMockito 都只能用于注入(inject)被测类的对象。所以基本上,我认为我需要诉诸手动调整它们。

最佳答案

为了回答这个问题,让我们花点时间看看 OCMock 和类似框架是如何工作的:

模拟框架使用 Objective-C runtime proxywrap 原始类,以便对该类的任何方法调用都被重定向到 mocking 框架,该框架有一组预先记录的关于什么的指令调用给定方法时执行的操作。

因此,答案是,是的,当你模拟一个类时,你也在隐式地模拟父类(super class)上的方法。您可以记录此方法将被调用的预期并验证是否发生了这种情况。您还可以验证提供的参数。

为了有效地使用模拟框架,没有必要了解细节,但是如果您有兴趣探索一些代理类的方法,请查看以下内容:

顺便说一句,我个人最喜欢的模拟框架是 OCMockito

关于objective-c - 我可以使用 OCMock 来测试父类(super class)是否被调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19740009/

相关文章:

ios - 可以从 iPhone 音乐库中读取 mp3 数据吗?

php - 在 Guzzle 中同时模拟响应和使用历史中间件

c# - 代码生成工具,为单元测试创​​建 C# 适配器类?

ios - 是否可以使用 OCMock 来模拟类方法和协议(protocol)?

iphone - OCMock 测试失败 - 未调用预期的方法

objective-c - 对于 Apple 实现(Cocoa/CocoaTouch),uint8_t 是否始终与 unsigned char 类型相同?

objective-c - 在 Mac App Store 上分发包含后台应用程序的 pref pane

iOS 动态移动的图像不会保持不变

c++ - 单元测试 C++ 模板

unit-testing - OCMock -[NSURLSessionDataTask 响应] 在 iOS 9 中无法识别的选择器崩溃