2015-06-13 39 views
1

所以我更多地瞭解如何測試異步代碼時,我遇到了以下幾點:爲什麼Objective-C/Swift中的異步網絡測試困難?

只要給定的測試方法完成,XCTest方法將考慮 一個測試來完成,並移動到下一個測試。這意味着前一次測試的任何 異步代碼將繼續運行,而 下一次測試正在運行。網絡代碼通常是異步的, ,因爲您不想在執行 網絡提取時阻止主線程。也就是說,加上一個事實,即測試完成時 測試方法完成,可以使它難以測試網絡代碼。」

然而,這是在我的腦海矛盾的。如果我理解正確的話,他說:首先XCTest方法即使在異步代碼完成後也會繼續運行,但是他說當測試方法結束時測試結束,但是這兩個語句是矛盾的,因爲異步代碼仍然在運行,所以測試沒有完成,在串行隊列中繼續執行下一個進程,換句話說,當異步代碼完成時測試完成,還是在異步代碼仍在運行時繼續測試?最重要的是,什麼讓網絡測試變得如此困難?謝謝。

回答

1

分解此語句告訴我們每個測試方法在返回時結束。因爲您正在使用異步回調測試網絡代碼,所以在該方法結束之前可能不會發生回調。因此,測試異步代碼可能會被認爲是潛在的困難**如果你不注意**

爲此,我將補充說我使用簡單的調度組來包裝代碼並等待代碼完成。 Here is a great example that I have inspired myself from to test my own code

+0

啊,所以然後他說:「只要給定的測試方法完成......」他並不是說它必須**完成**,而是從異步調度返回?謝謝 - 我一定會檢查這個例子! – rb612

+1

我不這麼認爲。以下是可能出錯的地方。 1>開始測試。調用異步方法。方法在另一個線程上異步啓動。測試結束並返回。 Ooops:當異步調用完成並調用回調方法時發生了什麼? – Laurent

+0

好吧,這使得更有意義。那麼測試方法需要回調,因爲這是它在異步網絡請求中記錄成功/失敗的方式? – rb612