Ios Moya在存根和正常请求之间切换

Ios Moya在存根和正常请求之间切换,ios,swift,moya,Ios,Swift,Moya,我的NetworkManager类(在生产目标中)具有不同的n/w请求。 现在使用Moya,如果我想提出生产要求,我将在下面使用 let provider = MoyaProvider<MyService>() let provider = MoyaProvider<MyService>(stubClosure: MoyaProvider.immediatelyStub) let provider=MoyaProvider() 对于下面使用的TestTarget请

我的NetworkManager类(在生产目标中)具有不同的n/w请求。 现在使用Moya,如果我想提出生产要求,我将在下面使用

let provider = MoyaProvider<MyService>()
 let provider = MoyaProvider<MyService>(stubClosure: MoyaProvider.immediatelyStub)
let provider=MoyaProvider()
对于下面使用的TestTarget请求

let provider = MoyaProvider<MyService>()
 let provider = MoyaProvider<MyService>(stubClosure: MoyaProvider.immediatelyStub)
let provider=MoyaProvider(stubClosure:MoyaProvider.immediatelysub)
所以,如果我想在如何为两者创建提供者之间切换。最好的方法是什么。 检查每种方法中的目标? 或者其他有效的方法

下面是我的请求代码

 func getRequest(onCompletion: @escaping NetworkCallBacks.ServiceResponse) {

    //let provider = MoyaProvider<MyService>() //for production
    let provider = MoyaProvider<MyService>(stubClosure: MoyaProvider.immediatelyStub) // for test
    provider.request(.getList(queryParameter: “Apple”)) { result in

        switch result {
        case let .success(moyaResponse):
        case let .failure(error):
            break
        }

    }
}
func getRequest(onCompletion:@escaping NetworkCallBacks.serviceress){
//让provider=MoyaProvider()//用于生产
let provider=MoyaProvider(stubClosure:MoyaProvider.immediatelysub)//用于测试
请求(.getList(queryParameter:“Apple”){结果为
切换结果{
成功案例(moyaResponse):
案例失败(错误):
打破
}
}
}

为什么不在创建网络管理器或调用请求函数时通过一些
测试
变量?我是这样做的:

extension Api.Service {

    convenience init(test: Bool) {
        self.init()
        self.test = test
    }
}
func getRequest(onCompletion: @escaping NetworkCallBacks.ServiceResponse, test: Bool = false)
然后,在获取提供者时,您可以懒洋洋地获取测试或产品提供者

func getProvider() -> RxMoyaProvider<Target> {
    return RxMoyaProvider<Target>(stubClosure: stubClosure)
}

func stubClosure(_ target: Target) -> Moya.StubBehavior {
    return test ? Moya.StubBehavior.immediate : Moya.StubBehavior.never
}

在创建网络管理器或调用请求函数时,为什么不通过一些
测试
变量?我是这样做的:

extension Api.Service {

    convenience init(test: Bool) {
        self.init()
        self.test = test
    }
}
func getRequest(onCompletion: @escaping NetworkCallBacks.ServiceResponse, test: Bool = false)
然后,在获取提供者时,您可以懒洋洋地获取测试或产品提供者

func getProvider() -> RxMoyaProvider<Target> {
    return RxMoyaProvider<Target>(stubClosure: stubClosure)
}

func stubClosure(_ target: Target) -> Moya.StubBehavior {
    return test ? Moya.StubBehavior.immediate : Moya.StubBehavior.never
}

一种方法是使用
stubClosure
依赖项创建
NetworkManager
struct,以便在创建NetworkManager时在构造函数中传递stubClosure。为stubClosure提供默认值为
MoyaProvider.neverStub
,这样您就不必为生产环境传递。只有当您想要测试时,才可以通过
MoyaProvider.immediatelysub

public struct NetworkingManager<T: TargetType> {
    let provider: MoyaProvider<T>

    init(stubClosure: @escaping MoyaProvider<T>.StubClosure = MoyaProvider.neverStub) {
        self.provider = MoyaProvider<T>(stubClosure: stubClosure)
    }
}
公共结构网络管理器{ let提供者:MoyaProvider init(stubClosure:@escaping MoyaProvider.stubClosure=MoyaProvider.neverStub){ self.provider=MoyaProvider(stubClosure:stubClosure) } }
当您想要进行测试时,可以通过如下步骤

let networkManager = NetworkManager<MyService>(strubClosure: MoyaProvider.immediatelyStub)
let networkManager=networkManager(结构关闭:MoyaProvider.immediatelysub)

一种方法是使用
stubClosure
依赖项创建
NetworkManager
struct,以便在创建NetworkManager时在构造函数中传递stubClosure。为stubClosure提供默认值为
MoyaProvider.neverStub
,这样您就不必为生产环境传递。只有当您想要测试时,才可以通过
MoyaProvider.immediatelysub

public struct NetworkingManager<T: TargetType> {
    let provider: MoyaProvider<T>

    init(stubClosure: @escaping MoyaProvider<T>.StubClosure = MoyaProvider.neverStub) {
        self.provider = MoyaProvider<T>(stubClosure: stubClosure)
    }
}
公共结构网络管理器{ let提供者:MoyaProvider init(stubClosure:@escaping MoyaProvider.stubClosure=MoyaProvider.neverStub){ self.provider=MoyaProvider(stubClosure:stubClosure) } }
当您想要进行测试时,可以通过如下步骤

let networkManager = NetworkManager<MyService>(strubClosure: MoyaProvider.immediatelyStub)
let networkManager=networkManager(结构关闭:MoyaProvider.immediatelysub)