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];