【问题标题】:How to write Unit Test for Alamofire request function?如何为 Alamofire 请求函数编写单元测试?
【发布时间】:2017-02-15 02:02:14
【问题描述】:

我有一个项目,我正在发送 .GET 请求以从服务器获取数据,为此我使用 Alamofire 和 SwiftyJSON。

例如:

我有文件“Links”、“Requests”和我的 ViewController。

Links.swift

var getAllData: String {
    return "\(host)api/getalldata"
}

Requests.swift

func getAllData(_ completion:@escaping (_ json: JSON?) -> Void) {
    Alamofire.request(Links.sharedInstance.getAllData).validate().responseJSON { (response) in
        do {
            let json = JSON(data: response.data!)
            completion(json)
        }
    }
}

视图控制器

Requests.sharedInstance.getAllData { (json) in
    // ...
}

那么,我该如何为这个案例编写单元测试呢?我刚刚学习单元测试,在所有书籍中都只有本地案例,没有网络案例的例子。请任何人描述我并帮助我使用 Alamofire 和 SwiftyJSON 为网络请求编写单元测试?

【问题讨论】:

标签: ios swift unit-testing alamofire swifty-json


【解决方案1】:

由于Requests.sharedInstance.getAllData调用是网络请求,你需要使用expectation方法来创建它的一个实例,这样你就可以等待Requests.sharedInstance.getAllData的结果和它的超时我设置10秒否则测试失败。

我们期望常量 errornilresult 不是nil 否则测试也会失败。

import XCTest

class Tests: XCTestCase {

  func testGettingJSON() {
    let ex = expectation(description: "Expecting a JSON data not nil")

    Request.sharedInstance.getAllData { (error, result) in

      XCTAssertNil(error)
      XCTAssertNotNil(result)
      ex.fulfill()

    }

    waitForExpectations(timeout: 10) { (error) in
      if let error = error {
        XCTFail("error: \(error)")
      }
    }
  }

}

您可能希望返回一个错误,以便详细了解您的请求失败的原因,因此您的单元测试也可以验证此信息。

func getAllData(_ completion: @escaping (_ error: NSError?, _ json: String?) -> Void) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多