【问题标题】:iOS Kiwi/Nocilla Tests not calling blocksiOS Kiwi/Nocilla 测试不调用块
【发布时间】:2013-06-29 23:14:01
【问题描述】:

我正在尝试熟悉Kiwi BDD 测试框架。我将它与Nocilla 结合使用来模拟HTTP 请求。这两个项目看起来都很棒,但我遇到了一些困难。我有以下测试规范:

    beforeAll(^{ // Occurs once
         [[LSNocilla sharedInstance] start];
    });

    afterAll(^{ // Occurs once
        [[LSNocilla sharedInstance] stop];
    });

    beforeEach(^{ // Occurs before each enclosed "it"
        couch = [[Couch alloc]initWithDatabaseUrl:@"http://myhost/mydatabase"];
    });

    afterEach(^{ // Occurs after each enclosed "it"
        [[LSNocilla sharedInstance] clearStubs];
    });

    it(@"should be initialized", ^{
        [couch shouldNotBeNil];
    });

    context(@"GET requests", ^{
    it(@"should get document by id", ^{
        __block NSData *successJson = nil;
        __block NSError *requestErr = nil;
        stubRequest(@"GET", @"http://myhost/mydatabase/test").
        withHeader(@"Accept", @"application/json").
        withBody(@"{\"_id\":\"test\",\"_rev\":\"2-77f66380e1670f1876f15ebd66f4e322\",\"name\":\"nick\"");

        [couch getDocumentById:@"test" success:^(NSData *json){
            successJson = json;
        } failure:^(NSError *error) {
            requestErr = error;
        }];

        [[successJson shouldNot]equal:nil];

    });
    });

对不起,长代码 sn-p。我想确保我给出上下文。如您所见,我正在测试发出 GET 请求并在“成功”块中报告结果并在“失败”块中报告错误的对象的行为。我有两个 __block 变量来接受存储成功和失败。目前,测试检查“成功”变量是否有值(不是零)。该测试通过。但是,调试此测试似乎从未执行过任何块。 successJson 显示为零。我希望 Nocilla 已将存根正文内容传递给成功块参数。那么我的测试构造不正确吗?

谢谢!

【问题讨论】:

    标签: ios unit-testing bdd kiwi nocilla


    【解决方案1】:

    您的测试的一般结构看起来不错。对于asynchronous testing,使用这个:

    [[expectFutureValue(theValue(successJson != nil)) shouldEventually] beTrue];
    

    上面!= nilbeTrue 的原因是没有 shouldEventually + notBeNil 组合可以用来测试最终的 nil 值。上面的测试会发现 successJson 最初为 nil,因此将继续轮询该值,直到您的回调使其变为非 nil。

    请注意,如果您正在做一个积极的测试,例如检查 successJson == @"test",那么您可以使用更简单的形式来表示期望:

    [[expectFutureValue(successJson) shouldEventually] equal:@"test"];
    

    还请注意,您可以使用 shouldEventuallyBeforeTimingOutAfter(2.0) 将默认超时(我认为是 1 秒)增加到您想要的异步预期超时。

    【讨论】:

      猜你喜欢
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多