6

OCMock オブジェクトに送信された引数をキャプチャする方法を知っている人はいますか?

id mock = [OCMockObject mockForClass:someClass]
NSObject* captureThisArgument;
[[mock expect] foo:<captureThisArgument>]

[mock foo:someThing]
GHAssertEquals[captured, someThing, nil];

foo への引数を検証するにはどうすればよいですか? モック定義のブロック内でも喜んで実行しますが、後でオブジェクトの機能を主張できるようにオブジェクトを取り出すことができれば、それは素晴らしいことです。

これは OCMock で可能ですか?

4

2 に答える 2

11

パラメータを検証したい場合は、スタブを次のように設定しているときに直接検証できます。

id mock = [OCMockObject mockForClass:someClass];
NSObject* captureThisArgument;
[[mock expect] foo:[OCMArg checkWithBlock:^(id value){ 
    // Capture argument here...
}]];

よろしく、クエンティンA

于 2012-04-25T09:46:35.587 に答える
4

呼び出しをスタブして、それを検証するブロックに渡すことができます。

NSObject *expected = ...;

id mock = [OCMockObject mockForClass:someClass]
void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) {
    NSObject *actual;
    [invocation getArgument:&actual atIndex:2];
    expect(actual).toEqual(expected);   
};
[[[mock stub] andDo:theBlock] foo:[OCMArg any]];

[mock foo:expected];

これにはコールバック バージョンもありますが、テスト コールバックと検証コールバックの両方に表示される状態変数が必要なため、制御フローはより複雑になります。

[[[mock stub] andCall:@selector(aMethod:) onObject:anObject] someMethod:someArgument]
于 2012-04-24T23:04:24.213 に答える