2017-04-24 67 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