3

我想测试我的init*方法是否使用 OCMockito 在其主体中调用其他方法。这是可能的,如果,我该怎么做?假设我想检查是否[self myMethod]已被调用。

我一直试图以一种如此幼稚的方式做到这一点,但正如你可以想象的那样,没有成功:

it(@"should trigger myMethod", ^{
    DetailsView *mockDetailsView = mock([DetailsView class]);
    [mockDetailsView initWithFrame:CGRectZero];
    [verify(mockDetailsView) myMethod];
});
4

1 回答 1

7

根据功能,存在三种可能性myMethod

myMethod呼叫移出init

如果myMethod实现了对象的非常具体的逻辑,它可能应该由对象的所有者显式调用。对象创建不应该做任何比设置其初始状态更多的事情。然后,如果它不在init它很容易测试。

检查对象的状态

如果“myMethod”以某种方式配置对象,您可以测试其属性或状态,而不是检查该方法是否被调用,因为它是次要的 - 最终结果很重要。

测试方法...

最后,如果你真的需要测试是否myMethod被调用,并且以上都不适用(不应该发生),你可以在方法体中设置一个属性self.myMethodCalled = YES。这是超级丑陋的,所以你可以从你的类派生,覆盖myMethod并在那里设置属性,然后验证这个调用测试子类(这是不安全和不纯的)。

这真的很hacky,表明从对象设计的角度来看可能有问题。

于 2015-03-25T12:43:10.527 回答