31

次のようなメソッド シグネチャを想定します。

- (void)theMethod:(void(^)(BOOL completed))completionBlock;

このメソッド シグネチャをモックして、メソッドが確実に呼び出されるようにし、完了ブロックを呼び出すだけにしたいと思います。このような他の投稿から、メソッド呼び出しをモックしてブロックを受け入れることができるが、ブロックを実行できないことがわかります。また、使用できる可能性のある andDo メソッドがあることも知っていますが、ブロックを渡して実行する方法がわかりません。

何か案は?

ありがとう。

4

5 に答える 5

17

編集 2:代わりにhttps://stackoverflow.com/a/32945785/637641を使用してください。

を使用してandDo:も問題ありませんが、個人的には[OCMArg checkWithBlock:].

[[mock expect] theMethod:[OCMArg checkWithBlock:^BOOL(id param)
{
    void (^passedBlock)( BOOL ) = param;
    // Normally I set some expectations here and then call the block.
    return YES;
}]];

// Code to test

[mock verify];

[mock stub] も使用できますが、theMethod が呼び出されていることを確認することをお勧めします。

編集1

OCMock 3 バージョン:

OCMExpect([mock theMethod:[OCMArg checkWithBlock:^BOOL(void (^passedBlock)(BOOL))
{
    // call the block...
    return YES;
}]]);

// Code to test

OCMVerify(mock);
于 2013-05-14T07:40:11.507 に答える
11

これは、OCMock 3.2 でサポートされるようになりました。とを使用[OCMArg invokeBlock][OCMArg invokeBlockWithArgs:...]て、スタブ メソッドに引数として渡されたブロックを呼び出すことができます。

于 2015-10-05T09:58:48.900 に答える