gpt4 book ai didi

unit-testing - 在 Alamofire 应用程序中单元测试 HTTP 流量

转载 作者:行者123 更新时间:2023-12-03 08:30:17 25 4
gpt4 key购买 nike

我正在努力弄清楚如何最好地测试使用 Alamofire 帮助与服务器数据同步的应用程序。

我希望能够测试我使用 Alamofire 并处理来自服务器的 JSON 响应的代码。
我想模拟这些测试,以便我可以将预期的响应数据提供给这些测试,而不会产生真正的网络流量。

这篇博客文章 ( http://nshipster.com/xctestcase/ ) 描述了在 Swift 中 Mock 一个对象是多么容易 - 但我不确定如何使用 Alamofire 及其链接响应来做到这一点。

我会 mock 经理吗?请求?回复?任何帮助,将不胜感激!

最佳答案

我正在添加另一个答案,因为我刚刚发现这种方法在我看来更容易阅读和使用。

我创建了一个虚拟的 Alamofire 类,它只包含测试所需的函数和类型。
现在我将这个文件包含在测试目标中,而不是真正的 Alamofire。

例如,我创建了我的版本 Request类,我定义了几个静态变量,我根据测试评估这些变量,对于这个类,我只实现了 initresponseJSON功能。

public class Request {

var request:String?
struct response{
static var data:NSHTTPURLResponse?
static var json:AnyObject?
static var error:NSError?
}

init (request:String){
self.request = request
}

public func responseJSON(options: NSJSONReadingOptions = .AllowFragments, completionHandler: (NSURLRequest, NSHTTPURLResponse?, AnyObject?, NSError?) -> Void) -> Self {

completionHandler(NSURLRequest(URL: NSURL(string:self.request!)!), Request.response.data, Request.response.json, Request.response.error)
return self
}
}

现在我可以在测试中模拟响应:
func testMytestFunction(){
var HTMLResponse = NSHTTPURLResponse(URL: NSURL(string: "myurl")!, statusCode: 200, HTTPVersion: "HTTP/1.1", headerFields: nil)

Request.response.data = HTMLResponse
Request.response.json = LoadDataFromJSONFile("MyJsonFile")

request(.POST, "myurl", parameters: nil, encoding: ParameterEncoding.JSON).responseJSON {
(request, response, JSON, error) -> Void in
// the JSON and response variable now contains exactly the data that you have passed to Request.response.data and Request.response.json
}
}

请求函数在这里定义:
public func request(method: Method, URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL) -> Request {

return Request(request: URLString.URLString)
}

public func request(URLRequest: URLRequestConvertible) -> Request {

return Request(request: "fakecall")
}

关于unit-testing - 在 Alamofire 应用程序中单元测试 HTTP 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com