2016-03-23 13 views
1

私は2つのクラスを持っています。メソッドが別のオブジェクトから呼び出されたことを確認してください。OCMock

オブジェクト1:

- (void) methodA { 
    ObjectB objectB = [[ObjectB alloc] init]; 
    [objectB methodB]; 
} 

とオブジェクト2:

OCMock、どのように私は methodB methodA呼び出していることを確認するかを使用して
- (void) methodB { 
    // Does something 
} 

?私は、次のようなテストを設定してい:

id mock = OCMClassMock([Object2 class]); 
OCMStub([mock methodB).andReturn(nil); 

[self.object1 methodA]; 
OCMVerify([mock methodB]); 

テストクラスは、テストオブジェクト1ですが、私はそれがobject2は上のメソッドを呼び出すことを確認したいと思います。このテストを実行すると、失敗メッセージが表示されます。

Method methodB was not invoked. 

私はまだモック/スタブの新機能です。私はテストを間違って構成している可能性があります。 Object1をテストしていますが、Object2で何かを確認しようとしているため、モックは私を少し混乱させます。

このテストを設定するとき、私は正しく考えていますか?もしそうでなければ、私はどのようにこれにアプローチすべきですか?

答えて

0

Object1が模擬を使用していて、ObjectBの新鮮なインスタンスではないことを確認する必要があります。これを行うための通常のアプローチは、依存性注入です。 Object1はObject2に依存しますが、Object1の代わりにObject2のインスタンスを作成すると、Object2のインスタンスは外部(注入)から設定されます。ウェブ上には膨大な量のものがあります。

OCMockを使用すると、このやりかたのやり方でハックすることができます。しかし、これはお勧めできません。 alloc/initnewに置き換えて、newクラスメソッドをスタブして、モックを返すことができます。そうすれば、Object1はそれを知らなくてもモックを使用します。まだObject2の新しいインスタンスが割り当てられていると思うでしょう。

id mock = OCMClassMock([Object2 class]); 
OCMStub([mock new]).andReturn(mock); 
OCMStub([mock methodB).andReturn(nil); 

[self.object1 methodA]; 
OCMVerify([mock methodB]); 

これは9.3のリファレンスドキュメントに記載されています。オブジェクトを作成するスタブ方法。

関連する問題