現在、TDD のアプリケーションを作成していますが、アプリケーションに必要な C 関数の使用法をテストする際に問題があります。テストする必要がある関数の例を次に示します。
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil)
TDD の C メソッドをモックまたはスタブするにはどうすればよいですか?
現在、TDD のアプリケーションを作成していますが、アプリケーションに必要な C 関数の使用法をテストする際に問題があります。テストする必要がある関数の例を次に示します。
UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil)
TDD の C メソッドをモックまたはスタブするにはどうすればよいですか?
Objective C ソリューション
C 関数ポインタを返すクラス メソッドを定義します。
+ (void (*)(UIImage *, id, SEL, void *))writeToSavedPhotosAlbumFunction {
return &UIImageWriteToSavedPhotosAlbum;
}
このクラス メソッドによって返される C 関数をプロダクション コードで使用します。
[SomeClass writeToSavedPhotosAlbumFunction](myImage, myTarget, mySelector, myContextInfo);
依存する C 関数を置き換える偽の C 関数を定義します。
static void FakeWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo) {
// Verify arguments.
// If this function has a return type, return a value.
// To verify that this function was called, write to a global variable
// then have the test case check the value of that global variable.
}
クラス メソッドをスタブして、テスト コード内の疑似 C 関数へのポインターを返します (この例ではKiwiを使用しています)。
[SomeClass stub:@selector(writeToSavedPhotosAlbumFunction) andReturn:theValue(&FakeWriteToSavedPhotosAlbum)];
これが役立つことを願っています:)