2017-04-24 42 views
0

我试图测试一个图像是否已经由imageView扩展设置。我试图从http url加载时传递测试。现在我想测试图像是否从https网址设置。Swift单元测试空图像

我当前的代码是:

func test_DateImageLoadedFromHTTPSURL() { 

    let expected = expectation(description: "Image from https did load") 

    let viewer = UIImageView(frame: CGRect(x: 0, y: 0, width: 300, height: 250)) 
    viewer.imageFromServerURL(urlString: "https://dummyimage.com/300x250/000/fff.png") 

    if viewer.image != nil { 
     expected.fulfill() 
    } else { 
     XCTFail() 
    } 

    waitForExpectations(timeout: 3.0, handler: nil) 

} 

它应该工作,除非我没有看到它。

谢谢

+0

你在这里测试什么? 'imageFromServerURL'方法?另外,你知道完成时间不到3秒吗?另外,该方法是一种异步方法吗?如果该方法是异步的,那么这将永远不会工作。如果它是同步的,那么它通常是不好的,会阻塞主线程 – Fogmeister

+0

响应非常迅速,我也尝试了10多秒。我正在测试将图像添加到UIImageView的方法。这也是一种异步方法。我确实尝试派遣 - 但那次测试也失败了 – user7684436

+0

我意识到所花费的时间并不重要。你在这里做的事情的顺序(我假设这个方法是异步的)对于你要测试的东西不起作用。 – Fogmeister

回答

1

您在这里做的事情的顺序将永远不会工作。你的方法是异步这里,所以事情的顺序发生将会像...

  1. 运行的方法来获取图像
  2. 检查imageView.image不是nil(它仍然是零在这一点上)
  3. 等待预期
  4. 图像的下载完成
  5. 设置图像

的方法是异步的,从而邻事情发生变化。

您需要为您的方法添加某种完成,以便您可以检查图像不为零后,它已被设置并完成调用。

像...

viewer.imageFromServerURL(urlString: "https://dummyimage.com/300x250/000/fff.png") { 
    // image has finished loading here... 
    // check the image is not nil 
} 

当然,你将需要更新的实际方法,以便它将接受一个封闭,一旦图象被加载运行关闭。

+0

这工作。非常感谢 – user7684436