在使用Kiwi测试Objective-C时,如何明确删除存根?
我试图测试一个值,我也这样做:在使用Kiwi测试Objective-C时,如何明确删除存根?,objective-c,testing,stub,kiwi,Objective C,Testing,Stub,Kiwi,我试图测试一个值,我也这样做: context(@"when pressing the audio alert button", ^{ context(@"when audio is currently disabled", ^{ beforeEach(^{ [subject.defaults stub:@selector(boolForKey:) andReturn:theValue(NO) withArguments:SHOULD_AUDI
context(@"when pressing the audio alert button", ^{
context(@"when audio is currently disabled", ^{
beforeEach(^{
[subject.defaults stub:@selector(boolForKey:) andReturn:theValue(NO) withArguments:SHOULD_AUDIO_ALERT_KEY];
});
it(@"should enable audio alerts", ^{
[subject.audioAlertButton sendActionsForControlEvents:UIControlEventTouchDown];
//I would like to kill/remove the stub at this moment.
BOOL shouldAudioAlert = [subject.defaults boolForKey:SHOULD_AUDIO_ALERT_KEY];
[[theValue(shouldAudioAlert) should] equal:theValue(YES)];
});
});
});
由于存根的原因,此测试将始终失败,shouldAudioAlert
将始终为NO
。当我写这个问题时,我意识到我可以通过改进代码的设计来避免这种情况(这是一个追溯测试,而不是先测试)。但是我仍然想知道我是否能够明确地杀死/删除存根
我无法从文档或搜索中找到答案。感谢您的帮助 据我所知,Kiwi不提供任何类型的
-unsub
API调用,因此,我不知道有什么方法可以做到这一点。但是玩跳房子,有一些东西被短暂地打断,然后解开,这将导致测试很难阅读和维护。相反,我建议使用单独的上下文
块,其中一个块启用音频,另一个块禁用音频。后一个context
块将使方法存根
另一种选择是根据提交给方法的参数,以更细粒度的方式存根。正如您所想象的,在这个维度上存根与在时间上存根是完全不同的,正如您在示例中所做的那样。我不明白这在这个特定的测试中如何帮助我?你能用代码写出来吗?事实上,另一件事是,看起来你在用Kiwi测试视图控制器代码。虽然这在理论上是可能的,但iOS社区的主流智慧是不要这样做。相反,您可能只想对模型层代码使用Kiwi,并为视图控制器创建KIF测试。就您最初的问题而言,只需在
主题中设置值如何。默认值为否,而不是使用存根?那么,就没有必要拆开它了。是的,太棒了!我很高兴:)