2013-05-08 61 views
0

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

回答

2

首先,存根方法,我不知道,如果返回的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"],你是n不是調用存根方法,而是調用真正的實現。您應該使用您的模擬對象:

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"];