2013-01-31 4 views
0

로 전송됩니다 , 그래서 나는 그 방법이 올바르게 작동한다고 확신한다. 그러나 올바른 시나리오에서 processResponse:error:forRequest:이 호출되는지 테스트하고 싶습니다. 나는 어쩌면 글로벌 변수를 정의하고 그 메소드를 swizziling하려고 생각하고 있었다. 그래서 그들은 here을 제안하는 것처럼 썼다. 그러나 나는 그것이 아마도 너무 우아하지 않다고 생각하고 있었다. OCMock을 사용하여이 작업을 수행 할 방법이 없습니까?내가 OCUnit 상당히 새로운 오전 나는이처럼 보이는 방법에 테스트 케이스를 추가하려고 자기 OCUnit

답변

4

, 당신은 부분적으로 모의하여이 작업을 수행 할 수 있습니다

-(void)testProcessMessageBodyCallsProcessResponse { 
    // let's pretend this initializer exists 
    XMPPMessage *bar = [XMPPMessage messageWithRequestId:@"baz"]; 

    Foo *processor = [[Foo alloc] init]; 
    id mockProcessor = [OCMockObject partialMockForObject:processor]; 
    [[mockProcessor expect] processResponse:OCMOCK_ANY error:nil forRequest:@"baz"]; 

    [processor processMessageBody:bar fromNick:@"nick"]; 

    [mockProcessor verify]; 
} 

당신은 또한 당신이 올바른 responseBodyprocessMessageBody:fromNick:에 전달되어 있는지 확인 수있는 경우 parseMessageBody:fromNick:isEcho:에 대한 호출을 조롱 할 수있다.

+1

+1 "내 대답보다 간단하다" –

2

하위 클래스 및 재정의 방법. 테스트 파일에 다음을 직접 정의하십시오. 클래스 이름이 푸 (Foo)라고 가정 해 봅시다.

이제 테스트에서 Foo 대신 TestFoo를 만듭니다. 그런 다음,이 방법은 그 말 ...

  • 인수는
  • 를 호출 마지막에서 호출 된 몇 번

    • 에 대한 테스트를 작성 고려할 수 있는지 여부가 다른 클래스를 추출한다고, 이 메서드를이 메서드로 옮깁니다. 그런 다음 OCMock (또는 OCMockito)와 같은 조롱 프레임 워크를 사용할 수 있습니다. OCMock와

    +0

    감사합니다. @ 존! 나는 서브 클래 싱을 생각하지 않았다 –

    관련 문제