2012-06-07 2 views
1

과 실패, 나는 자 NSPredicate 내가 배열을 필터링하고있어이 myArray. FVFileStatus은 typedef 열거 형입니다. 나는 술어를 사용하고 있기 때문에, 술어는 valueForKey를 호출, 그래서 나는 그것을 밖으로 스텁해야합니다OCMock valueForKey 내가 테스트하고있어 코드에서 자 NSPredicate

-(id)mockFVFileHandleWithStatus:(FVFileStatus)status { 
    id mock = [OCMockObject mockForClass:[FVFileHandle class]]; 
    [[[mock stub] andReturnValue:OCMOCK_VALUE(status)] valueForKey:[OCMArg checkWithSelector:@selector(isEqualToString:) onObject:@"status"]]; 
    return mock; 
} 

을 내 테스트를 실행하면 필터에 실패합니다. NSInvalidArgumentException - Reason: Return value does not match method signature이 있습니다.

NSPredicate와 함께 작동하도록 스텁을 설정하는 방법을 모르겠습니다.

아무도 도와 줄 수 있습니까?

답변

3

매우 가깝습니다. 다음과 같이 그루터기를 설정하는 올바른 방법은 다음과 같습니다

당신이 스텁하려고하는 속성 유형 INT입니다 때문, 직관적 처음 보일 수도 있고, 그 때문에 당신이 좋겠
[[[mock stub] andReturn:OCMOCK_VALUE(status)] valueForKey:[OCMArg checkWithSelector:@selector(isEqualToString:) onObject:@"status"]]; 

및 반환 값 :을 사용해야합니다. 후자의 리턴 타입 ID이다

그러나 mock 객체에서 호출되는 실제 방법은 상태하지만 valueForKey 아니다. 따라서 및 반환 값 :을 사용할 때 스텁은 원시 값을 반환하도록 설정되고 객체 제공 요청시 불평합니다. 그건 그렇고, 오류 메시지가 명확 수 있습니다, 내가 살펴 보겠습니다.

당신은 여전히 ​​있지만, andReturn 를 사용하여 값 개체를 설정하는 OCMOCK_VALUE 매크로를 사용할 수 있습니다 그 값 개체를 반환 스텁을 이야기하고, 그리고 원시하지 그이 거기에 싸여, 그리고 valueForKey :의 반환 유형과 호환되는 것은 무엇입니까?

+0

저는 [OCMArg checkWithSelector :]를 사용할 필요가 없으며 문자열을 -valueForKey : 인수로 사용할 수 있습니다. – Greg

관련 문제