使用OCMock的块期望值

lea*_*duo 4 unit-testing objective-c ocmock nsinvocation objective-c-blocks

我正在使用GHUnit和OCMock在我的iOS应用程序中进行一些测试工作.

所以我在整合它时遇到了一些麻烦.

以下代码运行良好.

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];
Run Code Online (Sandbox Code Playgroud)

但是当我改变[[[mock stub] andReturn:@"255"] capitalizedString]; 成

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

我收到一条错误,上面写着"原因:'NSCFString'应该等于'255'.应该相等"

我认为这两个陈述应该完全相同.我错了吗?

Chr*_*lay 7

setReturnValue: 期望一个指向返回值的指针,所以你的块应该是:

void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) {
    NSString *capitalizedString = @"255";
    [invocation setReturnValue:&capitalizedString];
};
Run Code Online (Sandbox Code Playgroud)

  • @ThomasW我认为他指的是[NSInvocation docs](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html#//apple_ref/doc/UID/20000212-setReturnValue_) (3认同)