2014-11-01 31 views
51

我有一個問題,Xcode IDE 6沒有正確檢測到我的swift單元測試用例。當我運行單元測試時,所有的測試都被執行了。Xcode 6編輯器無法識別單元測試

但是在編輯單元測試的IDE中無法識別。我必須運行整個單元測試套件才能運行單個測試。

我想不出我是如何避免這個故障。

enter image description here

+3

我有同樣的問題。尚無解決方案。在測試導航器中,我可以看到圖標運行單個測試。但是,如果我通過單擊這樣一個圖標來運行單個測試,則將執行所有測試,而不是僅單擊我單擊的那個測試。 – 2014-11-04 09:08:55

+1

我的項目越發壯大,越糟糕。我在許多swift文件中沒有IntelliSense。我希望,這些錯誤將會被更多版本的Xcode修復。 – ChaosSpeeder 2014-11-08 18:19:47

+1

認真考慮直接在VIM中工作。 – Aaron 2016-03-02 14:35:33

回答

54

問題解決了。我所要做的就是啓動「窗口 - >項目」窗口並刪除「派生數據。索引後所有測試正在工作。

與此同時,蘋果正在修復Xcode 6.3編輯器中的錯誤。

+3

在我的版本(6.2)下它的文件 - >項目設置 – styler1972 2015-04-01 14:55:18

+1

沒有爲我解決(6.4) – Daniel 2015-08-20 09:12:19

+7

在Xcode 7中爲我工作。必須在刪除派生數據後關閉Xcode,然後重啓。 – 2015-09-29 00:04:52

3

(因爲您的評論表示您仍然有一個星期後,這個問題,這可能幫不了你,但是......)

我就遇到了這個問題,即增加一個新的(SWIFT) 6.1中的測試不會讓它顯示在「測試導航器」或方案編輯器中 - 重新啓動Xcode解決了問題,現在我可以單獨運行測試。

+0

謝謝,重新啓動並沒有解決我的問題,我也在其他類的swift中。我相信我的項目設置與幾個框架套件和擴展導致這種行爲。 – ChaosSpeeder 2014-11-15 08:41:28

+0

修復了我的問題......哦Xcode ... – lehn0058 2016-10-05 14:47:43

2

我有一個類似的錯誤(儘管在Objective C中,不是快捷)。如果我爲這個類添加了一個新的測試方法,新的方法不會顯示在測試導航器中,也不會在我運行整個包時執行。我也不會在每個方法旁邊的邊欄中獲得這些點,如果點擊它,只會運行一種測試方法。

唯一解決我的問題是刪除我的整個測試類(暫時保存其他內容)然後重新創建測試類和(也許更仔細?)再次設置構建設置。

13

對我來說,「修復」是添加一個新的測試。我做了一些廢話:

func testThatNothing() { 
    XCTAssertTrue(true, "True should be true") 
} 

當我再次運行測試,在該文件中所有的測試是由編輯認可。我刪除了這個虛假測試,這一切都還好。不幸的是我不得不在每個文件中都這樣做,但至少它是有效的。希望這可以幫助某人。

+1

謝謝。看看我的答案。問題是過了一段時間內部派生的數據文件被搞亂了。您必須在一段時間後刪除它們以執行重新處理或重新索引。 – ChaosSpeeder 2015-03-20 17:07:03

+1

這應該被標記爲答案 – Max 2016-08-04 16:15:38

6

我有同樣的問題了。只要確保您的每一個測試用例有某種XCTAssert()語句。

func testSomething(){ 
    XCTAssert(true, "Pass") 
} 
+0

對該文件的任何編輯都適用於我。在文件中保留'XCTAssert'不會自動使它們被Xcode識別。 – 2015-06-03 19:31:30

+0

好笑。我試過了,它沒有像預期的那樣工作,因爲我已經有了名字爲'test'的方法。但是,我在測試文件中有一個私有方法,並且通過評論說測試導航器中的測試再次顯示它們是自測的。然後我取消註釋,一切恢復正常。錯誤。 – JJacquet 2015-12-11 21:38:06

18

對我來說,倫敦定盤前面加上「測試」

所有方法

ie

func arrayResponseCall() 

應該是:

func testArrayResponseCall() 
+0

謝謝,但命名前綴是所有測試功能的要求。看看我的示例,其中方法名稱是testExample()。從Xcode 6.3開始,這個bug已經被蘋果解決了。 – ChaosSpeeder 2015-06-24 15:54:35

+0

這給我修好了。這應該在文檔中更清晰。我花了一個多小時試圖找到這個bug! – Sethmr 2016-12-21 00:18:34

+0

區分大小寫!我嘗試了30分鐘,直到我注意到我寫了「Test ..」而不是「test ..」 – nablahero 2017-05-30 12:33:22

1

有時候,你需要做的是等待的Xcode來完成索引的所有文件。對於大型項目,我的單元測試導航器視圖通常是空的,直到完成。

+0

另外,有時您需要從目標中刪除測試類並重新添加它。 – 2015-08-31 09:04:24

3

的Xcode 7

我完全的答案是here

在Xcode 7中獲取單元測試的設置比在Xcode 6中容易一些(不需要將類和方法註釋爲public)。在導入類名前使用@testable

import XCTest 
@testable import MyProject 

class MyClassTests: XCTestCase { 

    func testMyMethod() { 

     let myClass = MyClass() 
     let sum = myClass.addTwoNumbers(1, 2) 

     XCTAssertEqual(sum, 3) 
    } 
} 

在你的課堂上,你不必做任何特別的事情。

class MyClass { 

    func addTwoNumbers(a: Int, b: Int) -> Int { 
     return a + b 
    } 
} 

您可能還需要在應用的構建設置下將「包裝」下的「定義模塊」設置爲YES。

又見這些問題的答案:

7

下面是針對此問題的解決方案很少:

  1. 等待一段時間。有時需要花費時間加載鑽石。 在不同文件之間導航,然後移動到它應該出現的相同測試案例

  2. 清理工程,清理生成文件夾乃至刪除派生的數據內容。檢查這個how to delete derived data safely.

  3. 退出Xcode並再次打開它。

  4. 確保您測試用例的名字開始testFunc_Name

  5. 有時候你測試用例文件可能包含比測試用例等功能。在這種情況下,菱形符號不會出現。 Remove such function.

在我的情況下,1,3和5解決方案通常爲我工作。

+0

3.是解決方案! – kmak 2016-04-03 14:25:47

+0

刪除派生數據並重新啓動XCode爲我工作 – eliasbagley 2016-06-03 16:21:23

1

對我來說,選擇Product->Test就足夠了,稍等一下。當測試剛剛開始運行時,所有鑽石都可用

3

確保測試用例名稱以「test」開頭,後面跟着您想要創建的任何名稱(cmd + B)項目。鑽石將出現!!。

+0

只要您更改爲在函數名稱中包含測試,它就會顯示出來。傻我.. – 2017-01-23 10:56:41

1

當您添加一個新的測試,保存文件(加利福尼亞+ S)和鑽石會出現

1

(上的Xcode 7.3驗證)對於我來說,我需要測試增加了以下這裏enter image description here

0

我解決了我的問題,只是將private方法變爲public

所以,如果這是你面臨同樣的problema,開關:

private func testString() 

到:

public func testString()