我可以使用OCMock来测试超类是否被调用?

时间:2013-11-02 07:53:46

标签: objective-c unit-testing ocmock

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

编辑:

我接受了答案,但我想澄清一下,我的问题是关于超级班不能直接参与单元测试的时候(显然是这样,因为这就是继承的工作原理)。看起来OCMock和OCMockito 似乎只能用于在测试中注入类的对象。所以基本上,我认为我需要手动调配它们。

2 个答案:

答案 0 :(得分:4)

要回答这个问题,让我们花一点时间来研究OCMock和类似框架的工作原理:

模拟框架使用Objective-C runtime代理包装原始类,以便对该类的方法的任何调用都重定向到模拟框架,它有一组预先录制的指令,说明在调用给定方法时该怎么做。

因此,答案是,是的,当你模拟一个类时,你也隐含地模仿超类上的方法。您可以记录将调用此方法的期望并验证是否发生了这种情况。您还可以验证提供的参数。

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

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

答案 1 :(得分:2)

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

请参阅 How to Test Calls to Super (iosunittesting.com)

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