单元测试iOS中的完成块

时间:2015-02-19 18:50:19

标签: ios unit-testing

我正在试图弄清楚如何为客户端后端代码编写单元测试,但到目前为止我还没有成功。我对单元测试不太熟悉,所以我看了ThisThisandThis

并阅读一些类似的问题,但我还没有完全弄清楚我应该如何为客户端后端编写单元测试。

- (void)testThatItGetsAllUsers
{
    // given
    XCTestExpectation *expectation = [self expectationWithDescription:@" fetch all users"];

    // when
    [[Backend sharedInstance] getAllUsers:^(NSArray * arr) {

            XCTAssertNotNil(arr);
            [expectation fulfill];

    }andFailure:^(NSError * err) {
        XCTAssert((err != nil), @"get all users request failed with error:\t%@", err);

    }];

    [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) {
     // request not successfull
        XCTAssert((error != nil), @"get all users from server did not return any data:\t%@", error);
    }];
    // then
}

如果有人可以指出我做错了什么并且感谢任何额外的知识,那将是非常有帮助的!

1 个答案:

答案 0 :(得分:1)

您需要修改 waitForExpectationsWithTimeout ,如下所示

[self waitForExpectationsWithTimeout:INT16_MAX handler:^(NSError *error) {

    BOOL flag = (error == nil);
    XCTAssert(flag, @"get all users from server did not return any data:\t%@", error);
}];

并添加到和失败 [期望履行] ,如下所示:

andFailure:^(NSError * err) {
    [expectation fulfill];
    XCTAssert((err != nil), @"get all users request failed with error:\t%@", err);
}];

如果您想了解有关异步测试的更多信息,请查看nshipster blog。 XCTestExpectation和示例有一个很好的解释。

通过关注John Reid个视频中的一个,我写了一些小project,它使用模拟 DI 技术来测试网络电话。

相关问题