2015-03-25 32 views
3

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

我一直在试图做一个这样的天真的方式,但你可以想像,没有成功:

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

回答

7

有根据的myMethod功能三种可能性。

移动从init

myMethod叫出如果myMethod意识到它可能应该由对象的所有者显式调用该对象的非常具体的逻辑。对象创建不应该只是设置其初始状态。然后,如果它不在init中,则很容易测试。

检查对象的状态

如果“myMethod`以某种方式配置的对象,你可以测试它的性能还是它的状态,而不是检查方法被调用,因为它是二次 - 最后的结果是很重要的。

测试方法...

最后,如果你真的需要测试myMethod是否被调用,并没有上述应用(这不应该发生),你可以在方法体中设置一物业self.myMethodCalled = YES。 这是非常丑陋的,所以你可以从你的类派生,重写myMethod并在那里设置属性,然后验证这个调用是否测试了子类(这是不安全和不纯的)。

这真的很黑,并且表明从对象设计的角度来看可能是错误的。

+0

很好的回答!没什么可添加的 – 2015-03-27 10:38:44

相关问题