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

标签 unit-testing alamofire

我正在努力弄清楚如何最好地测试使用 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/

相关文章:

javascript - 类型错误 : Cannot read property 'pathname' of undefined in react/redux testing

c# - Moq 中 SetupSet 和 SetupProperty 的区别

android - IntelliJ 是否将 "test file"与 APK 中的应用程序一起打包

ios - Swift 4 - Alamofire 4 上传带参数的图片

json - 使用 Alamofire 序列化有效的 JSON 数据时出现错误 "Garbage at end"

json - 保存 json 响应并将其解析为 swift 对象

Python:模拟文件以进行单元测试

javascript - 在 QUnit 测试中重置 KnockoutJS ViewModel

swift - 使用 Alamofire 和 SwiftyJson 从函数返回值

ios - Alamofire Swift 4 无聊的 SSL