首页 > 解决方案 > 如何使用 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)

    }

但是在这里我觉得测试并不完美,因为我们只测试是否为零,如果有人能以正确的方式指导我进行此测试,那就太好了。

标签: swifttestinguiimagexctest

解决方案


推荐阅读