ios - OCMock 可以运行 block 参数吗?

标签 ios unit-testing ocmock

假设一个方法签名如下:

- (void)theMethod:(void(^)(BOOL completed))completionBlock;

我想模拟这个方法签名以确保调用该方法,并且只调用完成 block 。我从其他帖子看到this one我可以模拟方法调用并接受任何 block ,但不能运行该 block 。我也知道有一个我可以使用的 andDo 方法,但我不知道如何传入一个 block 并运行它。

有什么想法吗?

谢谢。

最佳答案

您可以像这样使用 [[mock stub] andDo:] 来传递另一个 block ,该 block 在您的模拟方法被调用时被调用:

void (^proxyBlock)(NSInvocation *) = ^(NSInvocation *invocation) {
     void (^passedBlock)( BOOL );
     [invocation getArgument: &passedBlock atIndex: 2];
};
[[[mock stub] andDo: proxyBlock] theMethod:[OCMArg any]];

该 block 获取一个 NSInvocation 实例,您可以从中查询所有使用的参数。请注意,第一个参数在索引 2 处,因为您在索引 0 和 1 处有 self 和 _cmd。

关于ios - OCMock 可以运行 block 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530194/

相关文章:

ruby-on-rails - 在单元测试中使用 HABTM Fixture 的 Rails 单表继承返回 NoMethodError : undefined method `singularize'

iphone - iOS 4 上的 OCMock

ios - 用 Swift 模拟

iphone - 内存泄漏仪器警告

html - 网页在 iOS 中有很大的右边距

c# - 使用 ASP.NET MVC 模型绑定(bind)器进行单元测试

java - openejb 嵌入式容器找不到 persistence.xml

ios - 是否可以在静态方法中 OCMock 类调用?

ios - 无法在 View Controller 中看到标签

iphone - 在 ios7 上,<input type=date> 在没有默认值的情况下不会显示在 webview 中