2013-03-28 7 views
4

NSURLConnection에 대한 호출을 모의하려고합니다. 내 모의 객체를 호출하는 클래스 메소드 호출을 내 자신으로 바꿔 놓았다. 나는이 같은 모의을 구현하기 위해 노력하고있어 :Objective-C에서 포인터에 포인터를 조롱

[[[[urlConnectionMock expect] andDo:^(NSInvocation *invocation) { 
    NSURLResponse * __autoreleasing *responsePointer; 
    [invocation getArgument:&responsePointer atIndex:3]; 
    id response = [OCMockObject niceMockForClass:NSHTTPURLResponse.class]; 
    [[[response stub] andReturnValue:OCMOCK_VALUE((NSInteger){ 200 })] statusCode]; 
    *responsePointer = response; 
}] andReturn:encryptedResponse] sendSynchronousRequest:OCMOCK_ANY returningResponse:OCMOCK_ANY error:OCMOCK_ANY]; 

문제는 OCMOCK_ANY는 오브젝티브 C 포인터가 아닌 포인터 (컴파일러가 바르게 불만)에 대한 포인터이다. OCMock 소스를 더 깊이 파고 들기 전에 누군가이 문제를 해결할 수있는 방법을 제안 할 수 있습니까? 당신이 전적으로 더 나은 접근법을 가지고 있다면 완전한 신용이 주어집니다.

+0

OCMock 프로젝트가 아직 실행되지 않아 오랫동안 사용하지 않아서 어둠 속에서 촬영되었습니다. [OCMArg anyPointer]를 사용해 보셨습니까? –

+0

@CarlVeazey 네, 그 주사를 줬습니다. 주사위는 없었습니다. 나는 OCMArg를 확장하고 NSURLResponse **를 구현할 수있을 것이라고 생각합니다. ** 어쨌든 내일을위한 나의 계획입니다. –

답변

2

알아 냈어. 참고 자료는 이미 OCMock에 내장되어 있습니다.

id fakeResponse = [OCMockObject niceMockForClass:NSHTTPURLResponse.class]; 
[[[fakeResponse stub] andReturnValue:OCMOCK_VALUE((NSInteger){ 200 })] statusCode]; 
[[[urlConnectionMock expect] andReturn:encryptedResponse] sendSynchronousRequest:OCMOCK_ANY returningResponse:[OCMArg setTo:fakeResponse] error:[OCMArg setTo:nil]]; 

이것은 너무나 행복합니다.