当前位置 : 主页 > 手机开发 > ios >

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

来源:互联网 收集:自由互联 发布时间:2021-06-11
我想测试我的init *方法是否使用OCMockito调用其体内的其他方法.这是可能的,如果,我该怎么办?让我们说,我想检查是否已调用[self myMethod]. 我一直试图以这种天真的方式做到这一点,但你可
我想测试我的init *方法是否使用OCMockito调用其体内的其他方法.这是可能的,如果,我该怎么办?让我们说,我想检查是否已调用[self myMethod].

我一直试图以这种天真的方式做到这一点,但你可以想象,没有成功:

it(@"should trigger myMethod", ^{
    DetailsView *mockDetailsView = mock([DetailsView class]);
    [mockDetailsView initWithFrame:CGRectZero];
    [verify(mockDetailsView) myMethod];
});
根据myMethod功能,有三种可能性.

从init移出myMethod调用

如果myMethod意识到对象的非常具体的逻辑,它应该由对象的所有者显式调用.除了设置初始状态之外,对象创建不应该做任何事情.然后,如果它不在init中,那么很容易测试.

检查对象的状态

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

测试方法……

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

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

网友评论