OCMock 一个类方法,用于使用自定义数据回调传递的块



我确实有一个类可以像这样处理我的所有网络通信:

typedef void (^ networkEndblock) (NSArray *, NSError *);
@interface NetworkAPI : NetworkBase
+ (void) doSomeNetworkAcion:(networkEndblock) endBlock;
@end

像这样使用上面的代码(我不想在这里进入不相关的细节)

- (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,它是宏,但我不知道如何伪造我的网络API。

我查看了存根并期望,但我感到困惑,如果我能做我想做的事。

谢谢

类模拟[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,因为它会使你的代码更容易被其他人阅读。

最新更新