我有一个 SDK 框架,我想测试一个包含对另一个函数(在不同类中)的调用的函数,所以我为这个类创建了一个协议:
@protocol ManagerProtocol <NSObject>
-(BOOL)checkForStatus:(NSArray <NSString*>*)array;
@end
@interface Manager : NSObject <ManagerProtocol>
//some other code....
@end
@implementation Manager
-(BOOL)checkForStatus:(NSArray <NSString*>*)array {
//do some logic, will return false for now
return NO;
}
这是对这个方法的调用:
-(void)start {
Manager * m = [[Manager alloc] init];
NSArray * arr = @["foo",@"bar"];
if (![m checkForStatus:[arr]) {
//do something
return;
}
//continue the process
}
现在我想为 start 方法创建一个单元测试,我希望
checkForStatus
总是返回一个 True 值,所以我使用了 Mockingbird
框架,首先我创建了一个模拟协议:
class ManagerMock: ManagerProtocol {
override func check(forStatus array: [String]) -> Bool {
return true
}
}
在我的测试中,我模拟了 Mockingbird 并调用了启动函数:
let m = mock(ManagerMock.self)
given(m.check(checkForStatus: any())).willReturn(true)
start()
但问题是 start 里面的
checkForStatus
会返回 false 而不是 true,我是不是漏掉了什么?