2016-05-31 6 views
0

iOS 프로젝트에서 단위 테스트를 수행하기 위해 OCMock 3을 사용하고 있습니다.OCMock 3의 단위 테스트에서 함수의 반환 값을 확인하는 방법

OCMock은 iOS 용 위대한 단위 테스트 라이브러리라고하지만 위에 링크 된 OCMock 문서는 함수의 반환 값을 확인하는 방법을 명확하게 말하지 않았으며 항상 함수 반환을 스텁하는 방법을 알려줍니다 & . 하지만 그 함수 반환을 스텁 싶지 않아, 실제 반환 값을 확인해야합니다.

예를 들어, I는 단위 테스트에 내 School 클래스의 기능을 원하는 :

@implementation School 
... 
- (void) checkStudents { 
    BOOL isOnVacation = [[Coordinator sharedInstance] checkCalendar]; 
    if (!isOnVacation) { 
    takeLecture(); 
    } 
} 
@end 

내 테스트 케이스 : 나는 [[Coordinator sharedInstance] checkCalendar]의 반환 값을 스텁 싶지 않아

- (void) testCheckStudents { 
    // create a partially mocked 'Coordinator' instance 
    id coordinatorMock = [OCMockObject partialMockForObject:[Cooridnator sharedInstance]]; 

    // run the method under test 
    [schoolToTest checkStudents]; 

    // I want to check not only '[[Coordinator sharedInstance] checkCalendar]' is invoked, but also check its return value is YES. How to check this in OCMock? 
    OCMVerify([coordinatorMock checkCalendar]); 
} 

실제 구현을 실행합니다.

나는 [[Coordinator sharedInstance] checkCalendar]이 호출 될뿐만 아니라 반환 값이 YES인지 확인하고 싶습니다. OCMock에서이를 확인하는 방법?

은 (는 문서로, 나는 단지 그 함수가 호출되어 있는지 확인이 여기 스텁 함수 반환 &을 볼 수 있습니다. 나는 그것의 문서에 뭔가를 그리워합니까?)

답변

3

[[Coordinator sharedInstance] checkCalendar]의 반환 값이 범위 내에 있지 확인 단위 테스트가 School의 동작을 확인하고 있기 때문에이 경우 객체 조롱의 배경은 테스트중인 객체가 아닌 다른 객체가 예상대로 동작한다는 가정을 할 수있게하는 것입니다.

현재 상태에서의 테스트가 완벽합니다. Coordinator이 예상대로 작동한다는 가정하에 checkStudents이 기본 조건에서 호출 될 때 checkCalendar이 호출됨을 단순히 확인하는 것입니다. 당신이 checkCalendar의 반환 값을 확인하려면

, 당신은 다양한 조건에서 반환 값을 테스트 CoordinatorTests에 별도의 시험 방법을 작성해야 :

// CalendarTests.m 

- (void) testCheckCalendar 
{ 
    // Do some setup to mock the conditions created by checkStudents 

. 
.  
. 

    // Verify 
    XCTAssertEqual([[Cooridnator sharedInstance] checkStudents], YES); 
} 
+1

이 정답이다. checkStudents에 대한 하나의 테스트를 작성해야한다. 네가 가진거야. 'checkCalendar'에 대한 별도의 테스트를 작성해야하며,이 테스트에서는 아마도 OCMock이 전혀 필요하지 않을 것입니다. 메소드를 호출하고 리턴 값에 대한 어설 션을 작성하면됩니다. –