【问题标题】:Unit testing NSURLConnectionDelegate method单元测试 NSURLConnection 委托方法
【发布时间】:2013-08-24 21:15:48
【问题描述】:

我想测试一个发出 URL 请求的方法。当在NSURLConnectionDelegate 方法中收到响应时,我会保存响应。我真正想测试的逻辑是响应是否被保存。

如何测试NSURLConnectionDelegate方法?

我要测试的方法:

- (void) getProfilePictureURL :(NSString *)fbId
{
    //to get picture URL
    NSString *urlString = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", fbId];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (!connection)
    {
        NSLog(@"error while starting the connection");
    }
} 

// NSURLConnectionDelegate method
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    // Save response in user defaults
}

【问题讨论】:

  • 检查响应是否保存在 userdefault 中?这就是您可以识别数据已保存的地方。
  • 我知道,但只有在调用连接委托并执行代码后才能对其进行测试。如何检查委托被调用?
  • 抱歉,我无法理解您的情况。您想在保存响应之前或保存响应之后检查它吗??
  • 显然在保存响应后。但我必须等到连接委托被调用。然后只有我可以测试。
  • 显然。委托方法将数据保存在 userdefault 中,然后您需要在那里检查它。否则在调用该委托方法之前将没有数据。

标签: ios objective-c unit-testing ios6 nsurlconnectiondelegate


【解决方案1】:

NSURLConnection 类没有自己的任何方法来返回 http 响应代码,因此将 404 视为成功响应 - 我想这是因为建立了连接并返回了某些内容(404 页面)。

查看响应是 200 OK 还是 404 NOT FOUND 的技巧是将 NSURLResponse 转换为 NSHTTPURLResponse,然后使用该类方法查找 http 响应代码。

注意:如果建立了连接,委托肯定会被调用。您应该只检查是否未建立连接,然后您应该做什么。

【讨论】:

  • 我在委托方法中有一些代码,我想测试该代码。所以我只能在调用委托并执行代码后进行测试。
  • 那么问题来了怎么办?表示如何等待委托被调用?
  • 您不必等待它被调用。一旦您请求连接,即使没有互联网连接,它也会自动进入这些委托功能。
  • 还要确保在头文件中添加了NSURLConnectionDelegate
  • 调用委托需要一秒钟,然后我的测试方法才会被执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多