Ios Moya在存根和正常请求之间切换
我的NetworkManager类(在生产目标中)具有不同的n/w请求。 现在使用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请
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)