如何对此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]
对它做了什么,我不知道,即使我做了,也可能会改变。
另一个选择是调动[super hitTest:point withEvent:event]
(使用OCMock),但我不知道是否可以调整超类实现。
答案 0 :(得分:2)
您可以将调用包装到super并使用部分模拟。
在受测试的课程中,创建类似:
的内容-(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];