7

現在、TDD のアプリケーションを作成していますが、アプリケーションに必要な C 関数の使用法をテストする際に問題があります。テストする必要がある関数の例を次に示します。

UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil)

TDD の C メソッドをモックまたはスタブするにはどうすればよいですか?

4

3 に答える 3

3

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)];

これが役立つことを願っています:)

于 2014-05-08T23:45:11.233 に答える