非常简单的基本 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 存根不起作用的主要内容,如果未能解决你的问题,请参考以下文章

非常基本的 MySQL 代码不起作用

非常基本的字符串格式不起作用(Python)

OCMock:存根从不匹配签名

Qt信号/插槽不起作用[非常基本] [重复]

React-router-dom:非常简单的嵌套路由不起作用

基本的 If else 语句在 javascript 中不起作用