OCMock一个Class方法使用自定义数据回调传递的块 [英] OCMock a Class method to call back the passed block with custom Data

查看:79
本文介绍了OCMock一个Class方法使用自定义数据回调传递的块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我确实有一个类可以处理我的所有网络通信,如下所示:

I do have a class that handles all my network communication like this:

typedef void (^ networkEndblock) (NSArray *, NSError *);

@interface NetworkAPI : NetworkBase

+ (void) doSomeNetworkAcion:(networkEndblock) endBlock;

@end

我使用上面的代码是这样的(我不想在这里讨论不相关的细节)

I use the above code like this (I do not want to get into irrelevant details here)

- (void) runMyProcess:(SomeEndBlock)proccesEnded{

  // Bussiness logic


  // Get Data from the web
  [NetworkAPI doSomeNetworkAcion:^(NSArray *resultArray, NSError *error){

   // Check for error. if we have error then do error handling
   // If no error, check for array.
   // If array is empty then go to code that handles empty array
   // else Process data                                 

   }];
}

在我的测试方法中,我想触发runMyProcess进行测试,我不希望它进入网络,我想控制它并设置大小写以使其返回错误,即空数组...等.我知道如何使用SenTest,它是MACROS,但我不知道如何伪造我的网络API.

In my test method I want to trigger runMyProcess to test, I do not want it to go and hit the network, I want to control that and set cases to make it return an error, empty array ...etc. I know how to use SenTest and it is MACROS but I do not how to fake my network API.

我调查了存根并期望,但是如果我能做我想做的事,我会感到困惑.

I looked into stubs and expect but I got confused if I can do what I want.

谢谢

推荐答案

模拟类[NetworkAPI doSomeNetworkAction:],并使用andDo块.

// This is in the OCMock project but is really useful
#import "NSInvocation+OCMAdditions.h"

// Whatever you want for these values
NSArray *fakeResultArray;
NSError *fakeError;

id networkAPIMock = [OCMockObject mockForClass:NetworkAPI.class];
[[[networkAPIMock expect] andDo:^(NSInvocation *invocation) {
    networkEndBlock endBlock = [invocation getArgumentAtIndexAsObject:2];
    endBlock(fakeResultArray, fakeError);
}] doSomeNetworkAction:OCMOCK_ANY];

此外,我会在typedef中将NetworkEndBlock大写,因为这将使您的代码更易于他人阅读.

Also, I would capitalize NetworkEndBlock in my typedef as it will make your code easier to read for others.

这篇关于OCMock一个Class方法使用自定义数据回调传递的块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆