Метод заглушки и динамически установить его возвращаемое значение для входного параметра

Я хотел бы динамически возвращать значение, зависящее от параметра, в смоделированный метод, концептуально так:

[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:, но шпионы захвата, как правило, проясняют ваши намерения, когда дело доходит до проверки аргументов метода. Это делает для более читабельных спецификаций.

Другие вопросы по тегам