在 RxSwift 中使用 Stub 提供程序进行注册验证的 XcTest 案例

Posted

技术标签:

【中文标题】在 RxSwift 中使用 Stub 提供程序进行注册验证的 XcTest 案例【英文标题】:XcTest cases for signUp Validation using Stub provider in RxSwift 【发布时间】:2017-11-09 07:14:52 【问题描述】:

我是使用模拟存根的新手,请您帮助任何人!

在每次进行注册测试时遇到 XCTAssertEqual failed: ("201") is not equal to ("200") 之类的错误。

如何在不使用后端数据的情况下测试硬编码注册详细信息

如何测试成功和失败状态码的响应

任何帮助都应该感谢 - 谢谢

class LoginServiceUnitTests: XCTestCase 
    var stubProvider = RxMoyaProvider<RestApi>()
    override func setUp() 
        super.setUp()
        stubProvider = RxMoyaProvider<RestApi>(stubClosure: MoyaProvider.immediatelyStub)
    

    func testSignUpForSuccessResponse() 

        let userData = Creator()
        userData?.username = "raj@naresh.com"
        userData?.password = "password"
        userData?.displayName = "username"
        let target: RestApi = .signUp(userData!)
        stubProvider.request(target)  result in
            if case let .success(response) = result 
                XCTAssertEqual("201", String(response.statusCode))

            
        
    

【问题讨论】:

请发布代码而不是代码图片。 【参考方案1】:
extension XCTest 

    func customStatusCodeEndPoint(_ target: (RestApi), statusCode: Int) -> Endpoint<RestApi> 
        let url = target.baseURL.appendingPathComponent(target.path).absoluteString
        return Endpoint(url: url, sampleResponseClosure: .networkResponse(statusCode, target.sampleData), method: target.method, parameters: target.parameters, parameterEncoding: target.parameterEncoding)
    

在您的测试用例中编写如下所示的端点闭包

func testSignUpURLRequestForStubbedData()

    let endpointClosure =  (target: RestApi) -> Endpoint<RestApi> in
        self.customStatusCodeEndPoint(target, statusCode: 201)
    
    stubProvider = RxMoyaProvider<RestApi>(endpointClosure: endpointClosure, stubClosure: RxMoyaProvider.immediatelyStub)
    let userData = Creator()!
    userData.username = "raj@naresh.com"
    userData.password = "password"
    userData.displayName = "Surya"
    let target: RestApi = .signUp(userData)
    stubProvider.request(target)  result in
        if case .success(let response) = result 
            log.debug(response.statusCode)
            XCTAssertEqual("201", String(response.statusCode))

        
    

【讨论】:

以上是关于在 RxSwift 中使用 Stub 提供程序进行注册验证的 XcTest 案例的主要内容,如果未能解决你的问题,请参考以下文章

Android service 中的stub类是啥意思?

使用 RxSwift 在 UITableView 中进行 2 路绑定

使用 Moya + RxSwift 处理自定义错误响应

使用 RxSwift 进行分页 API 调用

如何使用 RxSwift 处理应用程序状态

使用 RxSwift 同步异步网络调用