存根方法并将其返回值动态设置为输入参数

时间:2013-11-25 14:42:22

标签: ios mocking kiwi

我想动态地将依赖于参数的值返回到模拟方法,在概念上如下:

[realObject stub] myMethod:CAPTUREDARGUMENT) andReturn:myMethod:CAPTUREDARGUMENT];

或者像使用OCMock一样访问块中的调用:

void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) {
    /* code that reads and modifies the invocation object */
};
[[[mock stub] andDo:theBlock] someMethod:[OCMArg any]];

这可能与新西兰人有关吗?

2 个答案:

答案 0 :(得分:5)

可以使用stub:withBlock:

[realObject stub:@selector(myMethod:) withBlock:^id(NSArray *params) {
    return [params objectAtIndex:0];
];

答案 1 :(得分:-1)

捕获参数的推荐方法是使用捕获间谍,例如:

id testDouble = [SomeClass mock];
object.property = testDouble;

KWCaptureSpy *spy = [testDouble captureArgument:@selector(methodWithParam:) atIndex:0];

[object doSomethingWithProperty];

[[spy.argument should] equal:someResult];

也可以使用stub:withBlock:来实现,但是当涉及到检查方法参数的任务时,捕获间谍倾向于使您的意图更清晰。这使得更具可读性的规格。