如何捕获发送到模拟的参数?

时间:2012-04-24 06:06:01

标签: objective-c ios ocmock

有谁知道如何捕获发送到OCMock对象的参数?

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

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

如何验证foo的参数?我也很高兴在模拟定义的一个块内做到这一点,但是如果我能把对象拿出来以便我可以在以后确定它的特征就会很棒。

OCMock可以实现吗?

2 个答案:

答案 0 :(得分:11)

如果你想验证你的参数,也许你可以在设置你的存根时直接这样做:

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

此致 昆汀A

答案 1 :(得分:3)

您可以将调用存根并将其传递给验证它的块:

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]