在另一个函数返回值中模拟一个函数

问题描述 投票:0回答:0

我有一个 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,我是不是漏掉了什么?

swift objective-c unit-testing mocking xctest
© www.soinside.com 2019 - 2024. All rights reserved.