非常简单的基本OCMock存根不起作用



我正在尝试使用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"];
}

首先,要存根该方法,我不确定是否返回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"];

最新更新