Как я могу протестировать это переопределение hitTest в iPhone? - PullRequest
1 голос
/ 19 декабря 2011

Как я могу протестировать это hitTest переопределение?

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

Проблема, с которой я сталкиваюсь, заключается в том, что UIEvent не имеет общедоступного конструктора, и поэтому я не могу создать UIEvent для получения других результатов на [super hitTest:point withEvent:event].

В качестве альтернативы я мог бы создать макет UIEvent, но это означало бы знание того, что [super hitTest:point withEvent:event] делает с ним, а я нет, и даже если бы я это сделал, это могло измениться.

Другим вариантом может быть swizzle [super hitTest:point withEvent:event] OCMock ), но я не знаю, возможно ли это просто реализовать реализацию суперкласса.

1 Ответ

2 голосов
/ 19 декабря 2011

Вы можете обернуть вызов в супер и использовать частичное макетирование.

В тестируемом классе создайте что-то вроде:

-(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];
...