非常简单的基本 OCMock 存根不起作用
Posted
技术标签:
【中文标题】非常简单的基本 OCMock 存根不起作用【英文标题】:Very simple basic OCMock stub not working 【发布时间】:2013-05-08 19:01:04 【问题描述】:我正在尝试使用 OCMock,但到目前为止,我的简单实验失败了。鉴于我想模拟的这个实验课:
@interface HTTPConnection : NSObject <NSURLConnectionDelegate>
@property (strong, nonatomic) NSURLConnection *connection;
-(int) makeConnection:(NSString*) url; // implementation returns 5
@end
当我调用以下测试用例时,结果变量包含 5 而不是 15,因此调用的是真实对象方法而不是模拟方法:
- (void)testExample
id connection = [OCMockObject mockForClass:[HTTPConnection class]];
[[[connection stub] andReturn: [NSNumber numberWithInt: 15]] makeConnection:[OCMArg any]];
HTTPConnection* realConnection = [[HTTPConnection alloc] init];
int result = [realConnection makeConnection:@"http://www.anything.com"];
【问题讨论】:
【参考方案1】:首先,要存根该方法,我不确定返回 NSNumber 是否有效,因此我将使用以下方法:
id connection = [OCMockObject mockForClass:[HTTPConnection class]];
int value = 15;
[[[connection stub] andReturnValue:OCMOCK_VALUE(value)] makeConnection:[OCMArg any]];
其次,在您的代码中,当您执行[realConnection makeConnection:@"http://www.anything.com"]
时,您调用的不是存根方法而是真正的实现。你应该使用你的模拟对象:
int result = [connection makeConnection:@"http://www.anything.com"];
或者,如果您想要一个部分模拟(在我看来这就是您要寻找的东西):
HTTPConnection* realConnection = [[HTTPConnection alloc] init];
id partialConnection = [OCMockObject partialMockForObject:realConnection];
int value = 15;
[[[partialConnection stub] andReturnValue:OCMOCK_VALUE(value)] makeConnection:[OCMArg any]];
int result = [realConnection makeConnection:@"http://www.anything.com"];
【讨论】:
以上是关于非常简单的基本 OCMock 存根不起作用的主要内容,如果未能解决你的问题,请参考以下文章