我有一个项目,我正在发送 .GET 请求以从服务器获取数据,为此我使用 Alamofire 和 SwiftyJSON。
例如:
我有文件“链接”、“请求”和我的视图控制器。
链接.swift
var getAllData: String {
return "\(host)api/getalldata"
}
请求.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 编写网络请求的单元测试吗?
Since Requests.sharedInstance.getAllData
call 是一个网络请求,您需要使用期望方法创建它的实例,以便您可以等待结果Requests.sharedInstance.getAllData
我设置了 10 秒超时,否则测试失败。
我们期待常数error
to be nil
and result
to not be 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) {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)