4

iOS 앱에서 GHUnit & OCMock을 사용하여 테스트 작업을하고 있습니다.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]; 

하지만 변경할 때 [모의 스텁] 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

+0

@leafduo'GHUnit'과'OCMock'은 애플이 아니다. – ThomasW

+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_) –