我想测试我的init*方法是否用OCMockito调用了它体内的其他方法。这有可能吗,如果,我该怎么做?比方说,我想检查是否调用了[self myMethod]。
我一直试图以一种如此天真的方式来做这件事,但正如你所能想象的那样,没有成功:
it(@"should trigger myMethod", ^{
DetailsView *mockDetailsView = mock([DetailsView class]);
[mockDetailsView initWithFrame:CGRectZero];
[verify(mockDetailsView) myMethod];
});发布于 2015-03-25 12:43:10
根据myMethod的功能,有三种可能性。
myMethod Move 从 init呼喊
如果myMethod实现了对象的非常具体的逻辑,那么对象的所有者可能应该显式地调用它。对象创建不应该只做设置其初始状态的事情。那么,如果它不在init中,就很容易测试。
检查对象的状态
如果‘myMethod’以某种方式配置对象,您可以测试它的属性或状态,而不是检查方法是否被调用,因为它是次要的--最终的结果很重要。
检验方法.
最后,如果您确实需要测试是否调用了myMethod,而且上面的任何一个都不适用(这是不应该发生的),那么可以在方法体中设置一个属性self.myMethodCalled = YES。这是非常难看的,所以您可以从类派生,重写myMethod并在那里设置属性,然后验证这个调用测试子类(这是不安全和不纯的)。
这真的很麻烦,从对象设计的角度来看,这可能是不对的。
https://stackoverflow.com/questions/29252219
复制相似问题