如何使用 Alamofire 为 http 请求编写单元测试?
Posted
技术标签:
【中文标题】如何使用 Alamofire 为 http 请求编写单元测试?【英文标题】:How to write unit test for http request with Alamofire? 【发布时间】:2017-07-14 00:15:54 【问题描述】:我的应用正在使用 Alamofire 发送 http 请求,并想为此部分编写一些单元测试。我创建了一些 json 文件作为响应。如何阻止 Alamofire 请求并让 Alamofire 返回 json 文件中的内容作为响应?可以用method swizzling来替换函数吗?
【问题讨论】:
【参考方案1】:使用 OHHTTPStubs 之类的框架来存根您的网络请求或发出真实的网络请求。无论哪种情况,XCTest
都有多种异步等待方法,例如XCTExpectation
s。
【讨论】:
【参考方案2】:这就是您等待一些异步回调的方式。这是最低限度的测试。您可以根据您的测试要求对其进行更多改进
func testCheckThatTheNetworkResponseIsEqualToTheExpectedResult()
//expected result
let expectedResult: [String:Any] = ["data":"somedata","order_number":2]
let expectations = expectation(description: "The Response result match the expected results")
if let requestUrl = URL(string: "some url to fetch data from")
let request = Alamofire.request(requestUrl, method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil)
request.responseJSON(completionHandler: (response) in
switch response.result
case .success(let result):
//do the checking with expected result
//AssertEqual or whatever you need to do with the data
//finally fullfill the expectation
expectations.fulfill()
case .failure(let error):
//this is failed case
XCTFail("Server response failed : \(error.localizedDescription)")
expectations.fulfill()
)
//wait for some time for the expectation (you can wait here more than 30 sec, depending on the time for the response)
waitForExpectations(timeout: 30, handler: (error) in
if let error = error
print("Failed : \(error.localizedDescription)")
)
【讨论】:
这会在 waitForExpectations 出现“无法及时为应用程序更新应用程序状态”的错误。以上是关于如何使用 Alamofire 为 http 请求编写单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 alamofire 在 HTTP 请求中发送 json
如何使用 Alamofire 发送带有压缩内容的 HTTP POST 请求?