2016-12-31 32 views
1

TLDR:沒有主機應用程序的情況下運行iOS單元測試有哪些限制?iOS無主機測試目標(以前的邏輯測試)有哪些限制?


似乎很多關於iOS無主機測試(邏輯vs應用測試)的帖子可能已過時。例如,根據thisthis Stack Overflow post,您不能在邏輯測試中實例化UIFont。我只是試着用Xcode 8.2.1和運行iOS 10.2的iPhone 7模擬器來做到這一點,它似乎很好。

這裏是這樣的測試實例項目: https://github.com/lyahdav/SnapshotLogicTest

根據this blog post

這實際上是Xcode的邏輯限制測試,他們沒有火起來 一個UIApplication的實例並不與UIKit很好地玩

但是,如果你看看我上面的示例項目它創建一個UIView和使用FBSnapshotTestCase斷言視圖在邏輯測試中呈現相同,並且一切似乎都正常工作。

此外,我無法找到蘋果的邏輯與應用程序測試文檔了。例如,this postthis post鏈接到Apple網頁,現在似乎已經死了,我無法找到替換它的新頁面。

我不知道蘋果是否已經最小化了區別,因爲差異僅僅是將主機應用程序設置在測試目標上。但我不清楚邏輯測試是否有任何限制。我非常喜歡它們,因爲它允許我爲應用程序的某些部分創建更小,更獨立的測試目標,這些目標的運行速度可以快於應用程序測試套件。

更新:我想我會添加一個關於UI Testing的筆記。根據Apple文檔,從Xcode 7開始,他們添加了UI Testing作爲XCTest的一部分。這似乎與關於主機vs無主機單元測試目標的觀點正交。

回答

0

我不知道蘋果是否已經最小化了區別,因爲差異只是將主機應用程序設置在測試目標上。

現在有單元測試和UI測試。兩者都涉及運行應用程序。 Apple不再單獨談論邏輯測試。

+0

你的例子從不測試應用程序的任何東西;這實際上是一個單獨的框架(pod)的測試。因此它不需要運行應用程序。 – matt

+0

我剛剛更新了測試回購,讓測試運行的應用程序的一部分,同樣的結果。 –

+0

另外,如果從測試目標設置中刪除主機應用程序,則單元測試不涉及運行應用程序。它不會在模擬器中啓動應用程序(但由於某種原因,它本身會啓動模擬器)。 –