메서드의 인수 중 하나에 대해 특정 포인터 값을 사용하여 조롱 된 개체에서 메서드가 호출되는지 확인하려고하지만 계속 "인수 유형 '*'이 지원되지 않습니다." 조롱 된 메서드가 호출 될 때의 예외입니다.char * 인수를 기대하는 OCMock 객체를 설정할 수 있습니까?
uint8_t *buf = calloc(65, sizeof(uint8_t));
id stream = [OCMockObject niceMockForClass:[NSInputStream class]];
[[stream expect] read:buf maxLength:64];
id myStream = [[MyStream alloc] initWithStream:stream];
// myStream should pass read:maxLength: call through to stream
[myStream read:buf maxLength:64];
STAssertNoThrow([stream verify], @"Did not pass call through");
여기 -[MyStream read:maxLength:]
입니다 :
- (NSInteger)read:(uint8_t *)buffer maxLength:maxLength {
// internalStream is the stream passed to -initWithStream:
return [self.internalStream read:buffer maxLength:maxLength];
}
: 최대 길이 : 여기 내 테스트 코드입니다 ". 인수 유형 '*'지원되지 않습니다"는 조롱 스트림에, 나는 얻을 예외. 특정 포인터 인수 값을 가진 호출을 기대할 수 있습니까?
편집 :이 문제는 * 숯불에 특정 될 수있다처럼
이 보이는 (또는 uint8_t) 인수. Objective C는 그것들을 ''으로 인코딩하고 OCMock의 타입 핸들링 코드는 '^'- 인코딩 된 값만을 포인터로 취급합니다. 나는 해킹을 시도했다 +[OCMArg resolveSpecialValues:]
과 -[NSInvocation getArgumentAtIndexAsObject:]
(NSInvocation + OCMAdditions.m)에서 '*'를 '^'와 동일하게 취급한다. 이로 인해 예외가 중지되었지만 기대가 여전히 충족되지 않았습니다.
아무도이 문제를 처리하는 방법을 알고 있습니까? 감사!