0

我正在尝试测试一个我也像这样存根的值:

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. 当我写这个问题时,我意识到我可以通过改进代码的设计来避免这种情况(这是一个追溯测试,而不是先测试)。但我仍然想知道我是否能够明确地杀死/删除存根。

我无法从文档或搜索中找到答案。任何帮助表示赞赏!

4

1 回答 1

1

据我所知,Kiwi 不提供任何类型的-unstubAPI 调用,所以,我不知道有什么方法可以做到这一点。但是玩 hopscotch 并且短暂地存根然后取消它会导致难以阅读和维护的测试。相反,我建议使用单独的context块,一个启用音频,一个禁用音频。后一个context块将使方法存根。

另一种选择是以更细粒度的方式存根,基于提交给方法的参数。正如您可以想象的那样,就时间而言,存根与存根是一个完全不同的维度,就像您在示例中所做的那样。

于 2014-04-23T20:25:11.863 回答