如何在iPhone中对这个hitTest覆盖进行单元测试?

时间:2011-12-19 11:35:45

标签: iphone ios unit-testing hittest ocmock

如何对此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),但我不知道是否可以调整超类实现。

1 个答案:

答案 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];