4

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

编辑:

我接受了答案,但我想澄清一下,我的问题是关于何时不能在单元测试中直接替代超类(显然是这样,因为继承就是这样工作的)。并且似乎 OCMock 和 OCMockito都只能用于注入到被测类中的对象。所以基本上,我认为我需要手动调配它们。

4

2 回答 2

4

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

模拟框架使用Objective-C 运行时代理包装原始类,因此对该类的任何方法调用都将重定向到模拟框架,该框架具有预先记录的一组指令,说明当给定方法时要做什么被调用。

因此,答案是,是的,当你模拟一个类时,你也在隐式模拟超类上的方法。您可以记录该方法将被调用的预期并验证这是否发生。您还可以验证提供的参数。

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

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

于 2013-11-02T08:05:41.953 回答
2

我不认为 OCMock 可以做到这一点。

请参阅如何测试对 Super 的调用(iosunittesting.com)

我发现上面链接的帖子对这个常见问题非常有帮助。我最终做的是在超类上创建一个类别(仅在我的测试目标中),它覆盖有问题的方法并设置一些可以由测试用例检查的全局状态(帖子中的方法#1)。

于 2014-05-16T23:48:55.487 回答