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 回答