gpt4 book ai didi

swift - URLSession 完成器的单元测试包装器

转载 作者:行者123 更新时间:2023-11-28 15:44:43 35 4
gpt4 key购买 nike

我已经使用适合 URLSession 完整回调签名的方法定义了自己的类,例如。 G。 (数据?、响应?、错误?)-> 无效。该方法包含用于处理响应的通用逻辑,例如。 G。检查数据,解析数据等现在我想对这个方法进行单元测试。该方法包含一些验证,例如,

guard let data = data else {
//some logic
return
}

这里我想测试一下这个函数是否真的会被终止。当然不可能实现反对void return(我是这么认为的,也许我漏掉了什么)。另一种选择 - 将方法标记为 throws,然后测试特定错误。但是这个方法将不适合 URLSession.shared.dataTask 方法。我对这些事情偏执吗?有没有可能实现它?提前致谢。

最佳答案

通常我会尝试将查询逻辑分成几个部分:

1) 路由器 2) 使用路由器的 API 客户端 3) 映射模型

所有这些部分你都可以测试。

如何测试 API 客户端:

fileprivate func testPerformanceOfGetNewsFromAPI() {

let expectationTimeout: Double = 30.0

self.measure {

let expectation = self.expectation(description: "Get gifters")

NewsAPIClient.getNews(closure: { response in
expectation.fulfill()
})

self.waitForExpectations(timeout: expectationTimeout) { error in
XCTAssertNil(error)
}
}
}

这个测试会检查。 APIClient 能否在 30 秒内收到响应。

如何测试映射:

For mapping, I use JASON: https://github.com/delba/JASON

设置你的swift文件:

import XCTest
import JASON
@testable import ProjectName

final class NewsTests: XCTestCase {

// MARK: - Properties
fileprivate var news: News!

// MARK: - Lyfecycles
override func setUp() {
super.setUp()

news = mockExample()
}

override func tearDown() {

news = nil
super.tearDown()
}
}

然后,在这个类中创建你的模拟:

 fileprivate func mockExample() -> ExampleModel? {

let data: Data

let json: JSON

do {
try data = Data(resource: "MyExampleFile.json") // Here enter your JSON example file. Target member ship for this file should be your test target

try json = JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions()) as! JSON

} catch let error {
XCTFail(error.localizedDescription)
return nil
}

let model = ExampleModel(json: json)

return model
}

然后,你可以在这个类中编写测试:

fileprivate func testMapping() {

XCTAssertNotNil(news)
XCTAssertEqual(news.title, mockExample()?.title)
XCTAssertEqual(news.text, mockExample()?.text)
XCTAssertEqual(news.timeStamp, mockExample()?.timeStamp)
}

在测试逻辑中,您还可以添加图片上传(如果它们存在于 JSON 中)。因此,您可以检查当前模型是否适合您,是否可以处理 JSON 响应。

关于swift - URLSession 完成器的单元测试包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284176/

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