首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OCMockito验证init*中的方法调用

使用OCMockito验证init*中的方法调用
EN

Stack Overflow用户
提问于 2015-03-25 09:46:50
回答 1查看 288关注 0票数 3

我想测试我的init*方法是否用OCMockito调用了它体内的其他方法。这有可能吗,如果,我该怎么做?比方说,我想检查是否调用了[self myMethod]

我一直试图以一种如此天真的方式来做这件事,但正如你所能想象的那样,没有成功:

代码语言:javascript
复制
it(@"should trigger myMethod", ^{
    DetailsView *mockDetailsView = mock([DetailsView class]);
    [mockDetailsView initWithFrame:CGRectZero];
    [verify(mockDetailsView) myMethod];
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-25 12:43:10

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

myMethod Move init呼喊

如果myMethod实现了对象的非常具体的逻辑,那么对象的所有者可能应该显式地调用它。对象创建不应该只做设置其初始状态的事情。那么,如果它不在init中,就很容易测试。

检查对象的状态

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

检验方法.

最后,如果您确实需要测试是否调用了myMethod,而且上面的任何一个都不适用(这是不应该发生的),那么可以在方法体中设置一个属性self.myMethodCalled = YES。这是非常难看的,所以您可以从类派生,重写myMethod并在那里设置属性,然后验证这个调用测试子类(这是不安全和不纯的)。

这真的很麻烦,从对象设计的角度来看,这可能是不对的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29252219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档