首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >方法,并将其返回值动态设置为输入参数。

方法,并将其返回值动态设置为输入参数。
EN

Stack Overflow用户
提问于 2013-11-25 14:42:22
回答 2查看 740关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
复制
[realObject stub] myMethod:CAPTUREDARGUMENT) andReturn:myMethod:CAPTUREDARGUMENT];

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

代码语言:javascript
代码运行次数:0
运行
复制
void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) {
    /* code that reads and modifies the invocation object */
};
[[[mock stub] andDo:theBlock] someMethod:[OCMArg any]];

这和猕猴桃有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-26 10:05:18

使用stub:withBlock:是可能的

代码语言:javascript
代码运行次数:0
运行
复制
[realObject stub:@selector(myMethod:) withBlock:^id(NSArray *params) {
    return [params objectAtIndex:0];
];
票数 5
EN

Stack Overflow用户

发布于 2013-11-26 11:43:18

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

代码语言:javascript
代码运行次数: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:实现,但是捕获间谍在检查方法参数的任务时往往会使您的意图更加清晰。这使得规范更具可读性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20195863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档