1

如何对这个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].

或者,我可以创建一个 mock UIEvent,但这意味着知道它会[super hitTest:point withEvent:event]做什么,而我不知道,即使我这样做了,它也可能会改变。

另一种选择是混合[super hitTest:point withEvent:event](使用OCMock),但我不知道是否可以只混合超类实现。

4

1 回答 1

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];
于 2011-12-19T19:17:57.127 回答