我想测试我的init*
方法是否使用OCMockito调用其体内的其他方法。这是可能的,如果,我该怎么办?让我们说,我想检查是否已调用[self myMethod]
。
我一直试图以这种天真的方式做到这一点,但你可以想象,没有成功:
it(@"should trigger myMethod", ^{
DetailsView *mockDetailsView = mock([DetailsView class]);
[mockDetailsView initWithFrame:CGRectZero];
[verify(mockDetailsView) myMethod];
});
答案 0 :(得分:7)
根据myMethod
功能,有三种可能性。
从myMethod
init
来电
如果myMethod
实现了对象的非常具体的逻辑,它应该由对象的所有者显式调用。除了设置初始状态之外,对象创建不应该做任何事情。然后,如果它不在init
中,则很容易测试。
检查对象的状态
如果'myMethod`以某种方式配置对象,您可以测试其属性或状态,而不是检查方法是否被调用,因为它是次要的 - 最终结果很重要。
测试方法......
最后,如果您确实需要测试是否调用myMethod
,并且以上都不适用(不应该发生),则可以在方法体中设置属性self.myMethodCalled = YES
。
这非常难看,所以你可以从你的类派生,覆盖myMethod
并在那里设置属性,然后验证这个调用子类的调用(这是不安全和不纯的)。
这真的很hacky并且表明从对象设计的角度来看可能是错误的。