4

我正在使用GHUnit & OCMock在我的iOS應用程序中執行一些測試工作。在OCMock中使用塊預期

所以我有一些麻煩整合它們。

以下代碼運行良好。

NSString *s = [NSString stringWithString:@"122"]; 
id mock = [OCMockObject partialMockForObject:s]; 
[[[mock stub] andReturn:@"255"] capitalizedString]; 
NSString *returnValue = [mock capitalizedString]; 
GHAssertEqualObjects(returnValue, @"255", @"Should be equal"); 
[mock verify]; 

但是當我改變[[[mock stub] andReturn:@「255」] capitalizedString];到

[[[mock stub] andDo:^(NSInvocation *invocation) { 
    [invocation setReturnValue:@"255"]; 
}] capitalizedString]; 

我得到了它說的錯誤「原因:‘NSCFString’應該等於‘255’應該等於」

我覺得這兩種說法應該做同樣的事情。我錯了嗎?

回答

7

setReturnValue:預期的指針返回值,所以你的塊應該是:

void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) { 
    NSString *capitalizedString = @"255"; 
    [invocation setReturnValue:&capitalizedString]; 
}; 
+0

你的解釋是比蘋果的文檔更清晰! – leafduo 2011-03-28 08:46:38

+0

@leafduo'GHUnit'和'OCMock'都不是Apple。 – ThomasW 2012-10-22 06:02:12

+3

@ThomasW我認爲他指的是[NSInvocation文檔](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html#//apple_ref/) DOC/UID/20000212-setReturnValue_) – 2012-10-22 19:14:39