OCMock和UIViewController

5

我目前正在研究如何有效地向我的应用程序的ViewControllers添加一些单元测试。到目前为止,这项工作进行得非常顺利,直到我尝试让一个特定的视图控制器呈现另一个视图控制器。

我正在使用OCMock和XCTest。测试如下:

id partialMock = OCMPartialMock([TestViewController class]);
[partialMock doSomeStuff];
OCMVerify([partialMock presentViewController:[OCMArg any] animated:[OCMArg any] completion:[OCMArg any]]);

如您所见,我只想验证在doSomeStuff函数内调用了被测试视图控制器的presentViewController。请注意,所提供的示例是我目前拥有的简化版。主要区别在于我正在验证参数viewController是另一个模拟对象。
问题是由于未对doSomeStuff方法进行存根处理,因此该调用将转发到真正的TestViewController实例,然后在自身上调用presentViewController,从而未触发partialMock的验证。
我是否遗漏了什么?或者说,我所尝试实现的确实无法完成?

嗨Marc,或许我说错了,但你正在对一个类对象设置部分模拟。通常情况下,为了设置一个普通的模拟对象,你使用的是类;但对于部分模拟对象,你应该从你想要"监视"的对象进行设置,就像这种情况下的viewController对象。 - J.C. Chaparro
哦,你说得对,事实上我的简化示例并不完全正确。因为我实际上有两个视图控制器,但这让我想到了一些东西。 - Marc-Alexandre Bérubé
1个回答

1

有没有一种方法可以在类的每个实例上存根该方法? 我的感觉是不行的,因为该方法是从TestViewController类本身调用的,它确实使用了存根方法。 我不确定我对我的问题是否完全清楚。 - Marc-Alexandre Bérubé
它可以工作了...我不知道之前出了什么问题,我认为这可能与[OCMArg any]有关,这导致我的验证失败。 - Marc-Alexandre Bérubé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接