2012-07-28 3 views
0

OCMock을 사용하는 테스트 케이스로 고민하고 있습니다. 지금까지 나는 OCMock을 몇 가지 프로젝트에서 사용했으며 항상 생각대로 작동합니다. 나는 image이라는 속성을 설정할 때 [self setNeedsDisplay]이 호출되는 다음과 같은 메서드를 사용합니다.OCMock이 호출 된 selector를 인식하지 못합니다.

- (void)testSetTapColorCallsDrawRect 
{ 
    SMColorButton *button = [[SMColorButton alloc] initWithImage:nil]; 
    id mock = [OCMockObject partialMockForObject:button]; 

    // Exptect setNeedsDisplay. 
    [[mock expect] setImage:OCMOCK_ANY]; 
    [[mock expect] setNeedsDisplay]; 

    button.image = [UIImage imageNamed:@"Button.png"]; 

    [mock verify]; 
} 

그리고 image 속성의 설정자는 다음과 같습니다.

- (void)setImage:(UIImage *)anImage 
{ 
    // Set the image if it changed. 
    if (anImage != image) { 
     image = anImage; 
     [self setNeedsDisplay]; 
    } 
} 

세터에서 [self setNeedsDisplay]이 호출됨을 알 수 있습니다. 메소드가 호출되지 않은 것처럼

OCPartialMockObject[SMColorButton]: expected method was not invoked: setNeedsDisplay

것 같습니다 : 나는 테스트를 실행할 때 나는 다음과 같은 오류가 발생합니다. 하지만 breakter setter 메서드를 설정하면 응용 프로그램에서 해당 줄을 중단하고 표시합니다.

나를 도와 줄 수 있습니까? 나는 내가 뭘 잘못하고 있는지 보지 않는다 ...

답변

2

문제는 당신이 시험하고있는 방법을 조롱하고 있다는 것이다. setImage:. 그 기대는 호출을 가로 채므로 테스트중인 클래스의 코드 경로를 따르지 않습니다. 테스트를 다음으로 변경해보십시오.

- (void)testSetTapColorCallsDrawRect 
{ 
    SMColorButton *button = [[SMColorButton alloc] initWithImage:nil]; 
    id mock = [OCMockObject partialMockForObject:button];  
    [[mock expect] setNeedsDisplay]; 

    button.image = [UIImage imageNamed:@"Button.png"]; 

    [mock verify]; 
} 
+0

그게 전부입니다! 고맙다고 생각하지는 않았지만 완전히 논리적입니다. OCMock은 메서드가 호출되었는지 검사합니다. 이제 테스트가 실패/예상대로 실행됩니다. 고맙습니다! –