2011-12-19 7 views
1

このユニットテストはどのようにしてhitTestオーバーライドできますか?iPhoneでこのhitTestオーバーライドをユニットテストするにはどうすればよいですか?

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

私が直面してる問題はUIEventは、publicコンストラクタを持っていないということですので、私は[super hitTest:point withEvent:event]に異なる結果を生成するためにUIEventを作成することはできません。

また、UIEventの模擬画像を作成することもできますが、これは、[super hitTest:point withEvent:event]が何をしているかを知っていることを暗示しています。

もう1つの選択肢は[super hitTest:point withEvent:event]OCMock)ですが、スーパーマルードの実装だけではわかりません。

答えて

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]; 
+0

1を、これは動作しますが、それが作るメソッドを作成するために私を強制的にコードは少し混乱します。私はコードを明確にする限り、テスト目的のコードを追加することに反対していません(幸いなことに、通常はそうです)。 – hpique

関連する問題