gpt4 book ai didi

Swift:测试用委托(delegate)调用的 URLSession

转载 作者:行者123 更新时间:2023-11-30 10:38:10 25 4
gpt4 key购买 nike

我正在尝试为我的应用程序进行单元测试。

我有这个函数准备请求

func getWeatherDataAtLocation() {
let WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather"
let weatherAPI = valueForAPIKey(named:"weatherAPI")
let lat = String(locationService.latitude)
let lon = String(locationService.longitude)
do {
try networkService.networking(url: "\(WEATHER_URL)?APPID=\(weatherAPI)&lon=\(lon)&lat=\(lat)", requestType: "weather")
} catch let error {
print(error)
}
}

我有一个服务类网络服务处理网络请求:

class NetworkService {

var weatherDataDelegate: WeatherData?
var session: URLSession

init(session: URLSession = URLSession(configuration: .default)) {
self.session = session
}

func networking(url: String, requestType: String) {

var request = URLRequest(url: requestUrl)
request.httpMethod = "GET"

var task: URLSessionDataTask
task = session.dataTask(with: request) { (data, response, error) in
switch requestType {
case "weather":
do {
let weatherJSON = try JSONDecoder().decode(WeatherJSON.self, from: data)
self.weatherDataDelegate?.receiveWeatherData(weatherJSON)
} catch let jsonErr {
print(jsonErr)
}
case // Other cases
default:
print("error")
}
}
task.resume()
}
}

然后我让委托(delegate)运行此函数来更新收到的 JSON

func receiveWeatherData(_ data: WeatherJSON) {
self.dataWeather = data
do {
try updateWeatherDataOnScreen()
} catch let error {
print(error)
}
}

问题是我不知道如何编写一些代码来测试它,而我找到的所有资源都是使用回调进行测试,有什么想法吗?

最佳答案

所以这里面有多个步骤。

1:创建此请求的响应的模拟版本。并将其保存在 json 文件中。命名如weather.json

2:完成后,您希望在执行请求时添加#ifdef testSchemeName。并告诉它告诉您的名为 networking() 的函数从名为 "\(requestType).json" 的文件中读取内容,而不是发出请求。

可选的,更高级的方式:

This实际上拦截您的请求并向您发送文件数据。更高级一点,但您的测试会更深一层。

关于Swift:测试用委托(delegate)调用的 URLSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57442970/

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