2011-12-19 4 views
1

단위 테스트를 hitTest 무시하려면 어떻게해야합니까?iPhone에서이 hitTest 재정의 단위 테스트를 어떻게 할 수 있습니까?

- (UIView*) hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    UIView* hitView = [super hitTest:point withEvent:event]; 
    // Do something based on hitView's properties 
} 

내가 직면하고있어 문제는 UIEvent는 public 생성자를 가지고 있지 않으며, 따라서 나는 [super hitTest:point withEvent:event]에 다른 결과를 생산하기 위해 UIEvent을 만들 수 있다는 것입니다.

나는 모의어 UIEvent을 만들 수도 있지만 그럴 경우 [super hitTest:point withEvent:event]이 무엇을하고 있는지 알 수 있으며, 그렇지 않은 경우에도 변경 될 수 있습니다.

또 다른 옵션은 [super hitTest:point withEvent:event] (OCMock)을 사용하는 것이지만 슈퍼 클래스 구현 만 뒤집을 수 있는지 여부는 알 수 없습니다.

답변

2

전화를 슈퍼로 랩핑하고 부분 모의를 사용할 수 있습니다. 테스트 클래스 다음

-(UIView *)checkHit:(CGPoint)point withEvent:(UIEvent *)event { 
    return [super hitTest:point withEvent:event]; 
} 

: 같은 것을 만들 테스트중인 클래스에서

,

CGPoint testPoint = CGPointMake(1,2); 
id mockHitView = [OCMockObject mockForClass:[UIView class]]; 
id mockSomething = [OCMockObject partialMockForObject:realObject]; 
[[[mockSomething stub] andReturn:mockHitView] checkHit:testPoint withEvent:[OCMArg any]]; 

[realObject hitTest:testPoint withEvent:nil]; 
+0

+1이 작업을 것이지만, 그것은을 만드는 방법을 만들기 위해 저를 강제로 약간 혼란스러운 코드. 코드를 명확하게 만드는 한 테스트 목적으로 코드를 추가하는 것이 아닙니다 (다행스럽게도 일반적으로 그렇게합니다). – hpique

관련 문제