1

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]です。

別の方法として、 mock を作成することもできますUIEventが、それはそれが何をするのかを知っていることを意味します[super hitTest:point withEvent:event]が、私は知りません。

別のオプションは[super hitTest:point withEvent:event]( OCMockを使用して) スウィズルすることですが、スーパークラスの実装だけをスウィズルできるかどうかはわかりません。

4

1 に答える 1

2

スーパーへの呼び出しをラップして、部分的なモックを使用できます。

テスト対象のクラスで、次のようなものを作成します。

-(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 に答える