在使用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测试。就您最初的问题而言,只需在
主题中设置值如何。默认值为
否,而不是使用存根?那么,就没有必要拆开它了。是的,太棒了!我很高兴:)