2013-03-31 15 views
4

我的一些應用程序從互聯網上獲取數據。我開始編寫單元測試的習慣,並且我懷疑如果我爲從互聯網返回的值編寫測試,我會遇到延遲和/或可靠性問題。一個單元如何測試網絡相關操作?

什麼是測試「位於Web請求的另一端」的數據的有效方法?

我正在使用Xcode附帶的股票單位測試工具包,但這個問題在理論上適用於任何測試框架。

回答

1

我提出了這個問題上freenode.net上#macdev IRC頻道德高望重的人,和我有一個很少有很好的答案。

Mike Ash(mikeash.com)建議在我的應用程序內部實現本地Web服務器。對於複雜的情況,我可能會這樣做。但是,我只是使用initWithContentsOfURL:(NSURL *)url中的一些內置方法NSData

對於更簡單的情況,mike表示另一種方法是將base64編碼的虛擬數據直接傳遞給NSData初始值設定項。 (使用data://dummyDataEncodedAsBase64GoesAfterTheDataProtocolThingy。)

同樣,「alistra」建議使用指向包含模擬數據的文件的本地文件URL。

1

除其他:

  • 介紹請求人工延遲
  • 使用另一臺機器在同一個網絡上或至少另一VM
  • 測試連接失敗(或者通過連接到一個不存在的服務器或切削物理上的連接
  • 測試不完整的數據(連接可能會中途中斷)
  • 測試重複數據(應用程序可能嘗試提交請求超過一旦當它認爲它沒有成功 - 在某些情況下可能會導致數據丟失)

所有這些都應該優雅地失敗(無論是在服務器端或客戶端)

+0

但是,如何確保我的「成功」案件實際通過? – Moshe

2

Unit測試專注於您班級的業務邏輯。不會有延遲,可靠性等問題,因爲您會使用一些模擬對象來模擬實際交互的內容。
你所描述的是某種形式的integration測試,對於OP來說似乎不是你的意圖。
你應該「晦澀」的另一端被嘲笑並沒有真正訪問網絡,遠程數據庫等