swift - 如何使用 XCTEST 为从 URL 加载的图像快速编写测试?
问题描述
我刚开始为我的代码编写测试用例,我想编写测试用例来测试是否从 URL 加载了正确的图像,并且还使用 XCTEST 在 swift 中实现了缓存。
测试代码
func loadImageUsingUrlString(urlString: String,completion: @escaping (UIImage)->()) {
imageUrlString = urlString
guard let url = URL(string: urlString) else { return }
image = nil
if let imageFromCache = imageCache.object(forKey: urlString as NSString) {
self.image = imageFromCache
return
}
URLSession.shared.dataTask(with: url, completionHandler: { (data, respones, error) in
if error != nil {
print(error ?? "")
return
}
DispatchQueue.main.async {
guard let imageToCache = UIImage(data: data!) else { return }
if self.imageUrlString == urlString {
self.image = imageToCache
}
imageCache.setObject(imageToCache, forKey: urlString as NSString)
completion(self.image ?? UIImage())
}
}).resume()
}
我写的测试的一部分
func test_DataImageLoadedFromHTTPSURL() {
let expected = expectation(description: "Image from https did load")
let viewer = CustomImageView(frame: CGRect(x: 0, y: 0, width: 300, height: 250))
viewer.loadImageUsingUrlString(urlString: self.sut.imageUrl, completion: {_ in
if viewer.image != nil {
expected.fulfill()
} else {
XCTFail()
}
})
waitForExpectations(timeout: 3.0, handler: nil)
}
但是在这里我觉得测试并不完美,因为我们只测试是否为零,如果有人能以正确的方式指导我进行此测试,那就太好了。
解决方案
推荐阅读
- python - 将 pandas df 写入 sql dB 的新列不适用于追加
- c++ - 为什么当我使用“new”关键字声明数组指针时无法删除它
- c# - 如何在 C# 中使用抽象类
- python - 尝试通过 ifttt 将谷歌助手集成到 python 来学习和测试一些东西
- qt - QDropEvent 从临时文件夹复制临时文件
- vbscript - 如何在任务计划程序中创建每 30 分钟运行一次的任务
- javascript - 刷新django模板中的数据而不重新加载页面
- reporting-services - 如何在后续页面上重复报告项目?
- python - 静态控制台进度条 Python
- python - 如何使用 sanic API 返回浮点数(或整数)?