iphone - 使用 OCMock 预期类别方法会产生 "[NSProxy doesNotRecognizeSelector"...]”

标签 iphone unit-testing ocmock

我正在使用OCMock尝试测试 NSURLConnection 的行为。这是不完整的测试:

#include "GTMSenTestCase.h"
#import <OCMock/OCMock.h>

@interface HttpTest : GTMTestCase

- (void)testShouldConnect;

@end

@implementation HttpTest

- (void)testShouldConnect {
  id mock = [OCMockObject mockForClass:[NSURLConnection class]];

  NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
  NSURLRequest *request = [NSURLRequest requestWithURL:url];
  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:mock startImmediately:NO];

  [[mock expect] connection:connection didReceiveResponse:OCMOCK_ANY];
}

@end

当使用类别方法模拟类时,委托(delegate)方法 connection:didReceiveresponse: 是,我收到错误:

Unknown.m:0:0 Unknown.m:0: error: -[HttpTest testShouldConnect] : *** -[NSProxy doesNotRecognizeSelector:connection:didReceiveResponse:] called!

有人遇到过这样的问题吗?

最佳答案

看起来您已经创建了 NSURLConnection 的模拟对象。但是,NSProxy 警告是正确的,NSURLConnection 对象没有选择器连接:didReceiveResponse: - 这是传递给实现协议(protocol)的对象的选择器。

您需要模拟一个实现 NSURLConnectionDelegate 的对象。由于委托(delegate)协议(protocol)指定了 connection:didReceiveResponse: 你不应该收到错误:)

我对 OCMock 没有太多经验,但这似乎可以消除编译错误:

@interface ConnectionDelegate : NSObject { }
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
@end

@implementation ConnectionDelegate
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { }
@end



@interface ConnectionTestCase : SenTestCase { }
@end

@implementation ConnectionTestCase

- (void)testShouldConnect {
 id mock = [OCMockObject mockForClass:[ConnectionDelegate class]];

 NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
 NSURLRequest *request = [NSURLRequest requestWithURL:url];
 NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:mock startImmediately:NO];

 [[mock expect] connection:connection didReceiveResponse:OCMOCK_ANY];
}

@end

希望这有帮助,

山姆

关于iphone - 使用 OCMock 预期类别方法会产生 "[NSProxy doesNotRecognizeSelector"...]”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1653948/

相关文章:

iphone - 我可以检查 iPhone 是否已插接吗?

c# - 使用 rhino mocks 为每次调用返回不同的实例

iphone - XCode4 单元测试和 UI 自动化

ocmock 的 invokeBlockWithArgs 使用 nil 参数

ios - 如何编写单元测试来检查按下按钮是否会导致调用正确的 IBAction?

objective-c - OCMock 和 block

javascript - 是否存在与 JavaScript 方法 encode() 等效的 Objective C?

ios - 如何在 iOS 项目之间仅共享( cocoa ) pod (!)?

iphone - 电影背景 iPhone SDK

objective-c - 在 OCMockito 模拟上使用句柄参数验证方法调用