ios - iOS 中的单元测试完成 block

标签 ios unit-testing

我正在尝试弄清楚如何为客户端后端代码编写单元测试,但到目前为止我还没有成功。我在单元测试方面经验不足,所以我阅读了 This , This , andThis

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

- (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
}

如果有人能指出我做错了什么并且任何额外的知识将不胜感激,那将非常有帮助!

最佳答案

需要修改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 block [expectation fulfill] 像这样:

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

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

通过关注 John Reid 之一我写的小视频project它使用 MockingDI 技术来测试网络调用。

关于ios - iOS 中的单元测试完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28614518/

相关文章:

iphone - 申请其他证书时需要再次付款吗?

php - 防止请求超时 - 大 POST 数据

ios - 如何将 UILabel 文本颜色更改回程序首次在 Xcode for iOS 7 中启动时的颜色?

c# - UrlHelper 类在 Asp.net mvc 中抛出空异常

java - 使 Sonar 覆盖 "don' t 声明 'throws Exception'“仅在单元测试类中

html - 如何将 iframe 视频缩放到更小的尺寸以适应 iOS 中的 UIWebView 框架?

ios - Swift - 如果语句不能正常工作

c++ - 是否有用于 gtest 的开源 VS2012 测试适配器?

unit-testing - 了解 stub 、伪造品和模拟物。

android - Gradle Copy 任务不复制文件