首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OCMock期望类别方法生成"[NSProxy doesNotRecognizeSelector“.]”

使用OCMock期望类别方法生成"[NSProxy doesNotRecognizeSelector“.]”
EN

Stack Overflow用户
提问于 2009-10-31 10:03:57
回答 2查看 4.3K关注 0票数 2

我正在使用OCMock来测试NSURLConnection的行为。下面是不完整的测试:

代码语言:javascript
复制
#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

当使用类别方法模拟类时,委托方法连接:didReceiveresponse: is,我得到了错误:

代码语言:javascript
复制
Unknown.m:0:0 Unknown.m:0: error: -[HttpTest testShouldConnect] : *** -[NSProxy doesNotRecognizeSelector:connection:didReceiveResponse:] called!

有人对此有意见吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-05 15:03:47

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

您需要模拟实现NSURLConnectionDelegate的对象。由于委托协议指定了连接:didReceiveResponse:您不应该获得一个错误:)

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

代码语言:javascript
复制
@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

希望这能帮上忙

相同的

票数 4
EN

Stack Overflow用户

发布于 2014-03-13 17:22:35

当GCC选项COPY_PHASE_STRIP设置为YES编译项目库时,我遇到了这个错误,因此符号是不可见的。然后,测试将针对该库运行,无法看到需要短截的方法,因此COPY_PHASE_STRIP=NO修复了该问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1653948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档