hachinoBlog

hachinobuのエンジニアライフ

OCMockの基本的な使い方

テストケースを書く際にOCMockを利用し始めたので基本的な使い方をメモ。

1.テストケース対象クラス内で他のクラスのメソッドを呼び出している結果を書き換える

//テスト対象クラス内で呼び出しているOtherクラスのモックを作成
id mock = [OCMockObject mockForClass:[Other class]];
//otherMethodメソッドの返り値をtestに書き換える
[[[mock stub] andReturn:@"test"] otherMethod];

2.テスト対象メソッド内で自クラスの他メソッドを呼び出している場合、その結果を書き換える

//テスト対象クラスのインスタンスからモックを作成する
TestTarget *target = [[TestTarget alloc] init];
id mock = [OCMockObject partialMockForObject:target];
//テスト対象メソッドで呼び出している非テストケース対象のotherMethodメソッドの返り値をtestに書き換える
[[[mock stub] andReturn:@"test"] otherMethod];

3.テスト対象メソッドの中で、ある特定のメソッドを呼び出したか検証する

//テスト対象クラスのインスタンスからモックを作成する
TestTarget *target = [[TestTarget alloc] init];
id mock = [OCMockObject partialMockForObject:target];
//テスト対象メソッドで呼び出しているotherMethodメソッドが実際に呼ばれたかセット
[[mock expect] otherMethod];
//verify時にexpectでセットしたメソッドが呼ばれたかどうか結果が返る。GHUnitであればGHAssertNoThrowとかで判定する。
[mock verify];

他にもmockForProtocolとか沢山機能があるみたいだが、とりあえず実際に使用したものだけ。