2014-10-31 61 views
21

我看了很多博客,並嘗試了很多東西來讓我的Swift單元測試在Xcode 6.0.1(或6.1)中工作。我想訪問我的應用程序的目標類,所以我寫了這行:添加Swift文件到測試目標沒有修復單元測試

var vc: LoginViewController! 

當然,我得到的錯誤「未申報類型爲‘LoginViewController’使用」。

然後,我嘗試將LoginViewController添加到我的測試目標中,但隨後在我的項目中的其他類中出現「使用未解析的標識符」錯誤。所以我嘗試這些類添加到我的測試目標,但我結束了錯誤的像下面的截圖看似無盡源泉:

xcode swift errors

聲明我的所有類爲public,導致其他錯誤,好像不好的做法。無論如何,在依賴許多框架和類的Swift項目中包含單元測試?我只是想從幾乎完全像這個article中的代碼開始。

+1

雙重檢查目標成員資格。如果它已經完成,請嘗試清理項目,刪除派生數據並重新啓動XCode。 – 2014-10-31 21:46:34

+0

到目前爲止還沒有工作,我現在使用單元測試的主要問題是使用第三方靜態框架。將類添加到測試目標,然後調用該框架中的函數會導致「使用未解析的標識符'className'」 – tfrank377 2014-11-03 17:56:47

+0

檢查以確保您的橋接頭類/目錄已同時在App目標和App測試目標中列出。 – 2014-11-05 18:56:32

回答

32

後大爲頭痛,並把這種能拖就拖的target membership,我發現,主要的問題是向測試目標成員添加文件時,Objective-C類仍然會抱怨。我認爲這是Swift進行單元測試的新方式的一箇舊兼容性問題,但解決方案是我的測試目標不知道橋接頭。因此,我在我的測試目標的構建設置添加到它的引用,就像這樣:

test target bridging header

現在看來淺顯,但錯誤是無益的。我沒有看到Swift單元測試的其他解決方案,這表明這可能是一個問題,但現在我知道了。

文藝青年最愛的

單元測試在斯威夫特工作,測試目標必須知道的一切應用目標都知道,所以在您的測試目標引用添加到您的橋接報過(如適用)。

+0

我花了太多時間試圖瞭解爲什麼我的測試無法正常工作。謝謝! – dccarmo 2015-03-10 16:38:06

+1

您可能需要將測試目標「生成設置」下的過濾器從「基本」更改爲「全部」,才能顯示此過濾器。 – Andrew 2015-05-04 15:27:24

15

我使用的Xcode 6.1

您需要將您的SWIFT文件添加到測試目標

enter image description here

+0

我真的需要它在Xcode 6.0上工作以實現自動化構建原因,但是我在Xcode 6.1中試過了,它給了我「使用未解析標識符'className'」的錯誤。 – tfrank377 2014-10-31 21:54:24

+7

必須有更好的方法來做到這一點。向測試目標添加代碼會減慢測試的速度。在Objective-C中,您不需要將測試目標添加到測試目標中 – 2015-02-12 19:42:59

13

如果您使用的是Xcode 7,現在有更好的方法來處理這個問題,使用@testable import {ModuleName}

只要確保您要測試的模塊的構建設置Enable Testability設置爲YES