gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:06:09 25 4
gpt4 key购买 nike

我想测试我的 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。我的方法调用 = 是。这非常丑陋,因此您可以从您的类派生,覆盖 myMethod 并在那里设置属性,然后验证此调用测试子类(这是不安全和不纯的)。

这真的很 hacky,表明从对象设计的角度来看可能有问题。

关于ios - 使用 OCMockito 验证 init* 中的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29252219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com