Метод заглушки и динамически установить его возвращаемое значение для входного параметра
Я хотел бы динамически возвращать значение, зависящее от параметра, в смоделированный метод, концептуально так:
[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 ответа
Решение
Можно с помощью stub:withBlock:
:
[realObject stub:@selector(myMethod:) withBlock:^id(NSArray *params) {
return [params objectAtIndex:0];
];
Рекомендуемый способ захвата аргументов - использование шпиона захвата, например:
id testDouble = [SomeClass mock];
object.property = testDouble;
KWCaptureSpy *spy = [testDouble captureArgument:@selector(methodWithParam:) atIndex:0];
[object doSomethingWithProperty];
[[spy.argument should] equal:someResult];
Это также может быть достигнуто с помощью stub:withBlock:
, но шпионы захвата, как правило, проясняют ваши намерения, когда дело доходит до проверки аргументов метода. Это делает для более читабельных спецификаций.