2016-06-08 4 views
1

단위 테스트에서 함수에 전달, 나는 다음과 같은 코드 조각을 테스트 할 요한은 "나이 23 그리고는 내가 테스트중인 기능을 실행확인 인수 값은 내가 <a href="http://ocmock.org/reference/" rel="nofollow">OCMock v3</a> 단위 테스트를 사용하고

내 테스트 경우
-(void) testHandleStudent{ 
    Student *student = [Student initWithName:@"John" age:23]; 
    // function under test 
    [schoolPartialMock handleStudent:student]; 

    // I want to not only verify checkIdentityWithName:age: get called, 
    // but also check the exact argument is passed in. that's John 23 in this case 
    // how to check argument ? 

} 

, 내가 정확한 인수 기능 checkIdentityWithName:age:로 전달됩니다 값 있는지 확인합니다. 그 이름은 "John"이고 23 세가 사용됩니다. 확인하는 방법 OCMock v3? (그것을 수행하는 방법은 설명서에 명확한 예는 없습니다.)

답변

0

당신이 도움이 그런

-(void) testHandleStudent{ 
    id studentMock = OCMClassMock([Student class]); 
    OCMStub([studentMock name]).andReturn(@"John"); 
    OCMStub([studentMock age]).andReturn(23); 

    [schoolPartialMock handleStudent:studentMock]; 
    OCMVerify([schoolPartialMock checkIdentityWithName:@"John" age:23]); 
} 

또는

-(void) testHandleStudent{ 
     id studentMock = OCMClassMock([Student class]); 
     OCMStub([studentMock name]).andReturn(@"John"); 
     OCMStub([studentMock age]).andReturn(23); 

     OCMExpect([schoolPartialMock checkIdentityWithName:@"John" age:23]); 

     [schoolPartialMock handleStudent:studentMock]; 

     OCMVerifyAll(schoolPartialMock); 
    } 

희망처럼

+0

덕분에 그것을 만들 수 있습니다, 내가 ' 다른 대답을보고 싶다면 OCMock 3을 사용하여 즉석에서 인수를 포착 할 수있는 솔루션을 제공 할 수 있습니다. 불가능할 경우이 대답을 수락합니다. –

+0

고마워.하지만 OCMock 3 문서를 보면, 내가 제공 한 답변이이 문서와 구문과 일치한다. – iSashok

+0

정답입니다. 어설 션을 수행하기 위해 인수를 캡처하려면 'andDo'를 사용하여 블록을 사용해야합니다. 이 경우 변수 범위 지정 및 호출에서 가져온 인수 유지와 함께 특별히주의해야합니다. 이 문제를 해결하기 위해 질문이 제기되었습니다. –