Objective c OCMock是一个类方法,用自定义数据回调传递的块

Objective c OCMock是一个类方法,用自定义数据回调传递的块,objective-c,unit-testing,mocking,ocmock,Objective C,Unit Testing,Mocking,Ocmock,我有一个类可以处理我的所有网络通信,如下所示: typedef void (^ networkEndblock) (NSArray *, NSError *); @interface NetworkAPI : NetworkBase + (void) doSomeNetworkAcion:(networkEndblock) endBlock; @end 我这样使用上面的代码(我不想在这里讨论无关的细节) 在我的测试方法中,我想触发runMyProcess进行测试,我不想让它进入网络,我想

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

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

@interface NetworkAPI : NetworkBase

+ (void) doSomeNetworkAcion:(networkEndblock) endBlock;

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

在我的测试方法中,我想触发runMyProcess进行测试,我不想让它进入网络,我想控制它并设置案例,使它返回错误、空数组……等等。我知道如何使用SenTest,它是宏,但我不知道如何伪造我的网络API

我看了看存根,期待着,但我感到困惑,如果我能做我想做的


感谢类mock
[NetworkAPI doSomeNetworkAction:
并使用
和do

// 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中大写
networkedblock
,因为这会使你的代码更容易为其他人阅读。

在iOS 7上运行良好,我不得不添加NSInvocation+ocmadeditions.h,但在iOS 6.1中崩溃了,知道吗?很难说。您的endBlock中是否有不符合iOS6的内容?事故日志怎么说?
// 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];