如何对该hitTest覆盖进行单元测试?

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

我面临的问题是UIEvent没有 public 构造函数,因此我无法创建UIEvent[super hitTest:point withEvent:event]上产生不同的结果。

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

另一个选择是混淆[super hitTest:point withEvent:event](使用OCMock),但我不知道是否有可能仅混淆 super class 实现。

最佳答案

您可以包装对super的调用并使用部分模拟。

在要测试的类中,创建如下内容:

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

然后在您的测试 class 中:
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];

关于iphone - 如何在iPhone中对这个hitTest替代进行单元测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8560717/

10-13 08:17