【问题标题】:When testing Objective-C with Kiwi, how do you explicitly remove a stub?使用 Kiwi 测试 Objective-C 时,如何显式删除存根?
【发布时间】:2014-04-18 12:46:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c testing stub kiwi


    【解决方案1】:

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

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

    【讨论】:

    • 我不明白这对我在这个特定的测试中有何帮助?你能用代码写出来吗?
    • 实际上,另一件事是,看起来您正在使用 Kiwi 测试视图控制器代码。虽然这在理论上是可行的,但 iOS 社区的普遍智慧是不这样做。相反,您可能只想将 Kiwi 用于您的模型层代码,并为您的视图控制器创建 KIF 测试。
    • 就您最初的问题而言,如何将subject.defaults 中的值设置为NO,而不是使用存根?然后,就没有必要取消它了。
    • 是的,太棒了!存根高兴:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2016-02-14
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    相关资源
    最近更新 更多