【问题标题】:OHHTTPStubs Unit Test ImplementationOHHTTPStubs 单元测试实现
【发布时间】:2018-07-09 20:16:56
【问题描述】:

我正在尝试正确实现OHHTTPStubs,但遇到了一些麻烦。

我想做这个库所做的事情。向 URL 发出请求并返回模拟的 JSON 响应。

这就是我设置它的方式,但没有任何东西被正确调用,甚至没有运行存根。

- (void)testWithOHHTTP {
    [OHHTTPStubs initialize];

        [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
            return [request.URL.host isEqualToString:@"http://www.myweb.com"];
        } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) {
            NSDictionary* obj = @{ @"key1": @"value1", @"key2": @[@"value2A", @"value2B"] };
            return [OHHTTPStubsResponse responseWithJSONObject:obj statusCode:200 headers:nil];
        }];

        NSURL *URL = [NSURL URLWithString:@"http://www.myweb.com"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];

        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

        [OHHTTPStubs setEnabled:YES forSessionConfiguration:config];

        NSURLSession *session = [NSURLSession sessionWithConfiguration:config];


        [request setHTTPMethod:@"GET"];

        NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

            NSLog(@"#### Data: %@, Response: %@, Error: %@", data, response, error);
            NSDictionary *dataJSON = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
            NSLog(@"#### %@", dataJSON);


        }];
        [dataTask resume];

        NSLog(@"All stubs: %@", [OHHTTPStubs allStubs]);

}

kevinosaurio 提供的答案是更改此行:

[request.URL.host isEqualToString:@"http://www.myweb.com"];

[request.URL.host isEqualToString:@"www.myweb.com"];

【问题讨论】:

    标签: ios objective-c unit-testing mocking ohhttpstubs


    【解决方案1】:

    你的问题是你的主机是 www.myweb.com 没有http://www.myweb.com

    ...
    
    [OHHTTPStubs stubRequestsPassingTest:^BOOL(NSURLRequest *request) {
        return [request.URL.host isEqualToString:@"www.myweb.com"];
    } withStubResponse:^OHHTTPStubsResponse*(NSURLRequest *request) {
        NSDictionary* obj = @{ @"key1": @"value1", @"key2": @[@"value2A", @"value2B"] };
        return [OHHTTPStubsResponse responseWithJSONObject:obj statusCode:200 headers:nil];
    }];
    ...
    

    【讨论】:

    • 我试过了,但每次都会出现这个错误。 Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSUnderlyingError=0x1c024f0c0 {Error Domain=kCFErrorDomainCFNetwork Code=-1002 "(null)"}, NSErrorFailingURLStringKey=www.myweb.com, NSErrorFailingURLKey=www.myweb.com, NSLocalizedDescription=unsupported URL
    • 您只需要在这一行中更改它:[request.URL.host isEqualToString:@"www.myweb.com"]。在其他人使用:"http://www.myweb.com"
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多