2012-09-06 41 views
27

我曾看到有人在此處和其他地方發佈過這方面的消息,但我還沒有找到任何可行的解決方案。我使用XCode 4.4,並設置了一堆單元測試。我之前在這個項目中運行過他們,所以我知道如果他們真的跑了,他們會通過/失敗。我的部分單元測試測試並未在XCode 4.4中完成

我有大約15個測試套件,每個包含1-7個測試。在大多數嘗試中,除1(FooTests)外,所有測試套件都已完成(並通過)。它給出了警告:

FooTests did not finish 
    testFoo did not finish 

XCode會報告測試成功,無論未完成的測試會發生什麼。另一件需要注意的事情是,有時候這是一個不會完成的測試,有時候多個套件不會完成。我沒有注意到所有測試都完成的情況,但通過這種看似隨意的行爲來判斷,我認爲這是可能的。

那麼,這是XCode中的一個錯誤嗎?我想不出任何其他原因,測試隨機不完成,然後導致XCode報告,一切都成功。有沒有解決方案?

+0

已找到同樣的問題。清理目標並運行測試似乎可以在彈出時解決問題。我認爲這是一個錯誤。 – timthetoolman

+0

清理並不適用於我:/ –

+0

我也遇到了這個問題,但是我發現它似乎只在我沒有立即運行所有測試時纔會發生。如果我編輯這個方案並取消選中一些測試,我最終會得到這個「沒有完成」的警告,否則我不會這樣做。 – Cruinh

回答

4

我剛剛遇到了XC4.5DP4的這個問題。

我有一個測試,它在循環中做了一些工作,當它掉出循環時什麼都沒做,我得到了「沒有完成」的錯誤。

在試圖證明測試完成,我說這是最後一行:

NSLog(@"done"); 

不僅「做」得打印到輸出 - 現在Xcode中說,測試有完了。

似乎是一種解決方法...去圖。

+0

這對我來說可靠地重現 - 如果我再次將測井線移走,Xcode就會回到說「沒有完成」。但是,您的里程可能會有所不同... –

+0

這對我沒有任何幫助。未完成的測試涉及一個Web請求,它可能不會等到請求完成後才運行其餘的測試。但我有其他測試使用web請求,工作正常... –

+0

我看到這個以及...怪異的。 – seanicus

2

我在日誌導航器中有相同的警告。我爲我修好了。

在我的項目中,我有2個方案,一個用於運行項目,另一個用於單元測試。

  1. 轉到產品 - >編輯計劃...
  2. 在方案選擇器選擇單元測試方案
  3. 在左邊
  4. 變化從LLDB選擇「測試」 -icon調試器GDB並按OK
  5. 測試應該結束。 (對我來說,它工作得很好)
+4

這在過去對我有用,但在這種情況下不起作用。 –

4

我正在使用XCode46-DP3,並在測試中解決了這個問題。我有幾個測試,啓動一個Web服務器,然後執行http調用它;在測試結束時,Web服務器停止。上週這些測試已經開始警告「沒有完成」。 對我來說已經足夠,在這些測試的結尾處添加以下睡眠(正是我在拆機添加):

- (void)tearDown { 
    [self.httpServer stop]; 
    [NSThread sleepForTimeInterval:1.0]; 
    self.httpServer = nil; 
    self.urlComposer = nil; 
} 
+0

+1提到你把它放在「tearDown」中。只是一個評論:你不應該在這裏打電話給[super tearDown]嗎? –

17

我上了XCode 4.5.2。對於應用程序單元測試,如果您的測試套件如此快速完成以至於在此之前未正確加載主應用程序,則會收到警告。您可以通過在測試結束後添加睡眠來避免此問題,如下所示。邏輯單元測試不會發生。

[NSThread sleepForTimeInterval:1.0]; 
+1

我發現你實際上可以使這個'0.0',它也可以工作(並且不會減慢你的測試)。 –

+2

在一個快速套件上,我仍然看到0.0。我把這段代碼放在我的tearDown函數中:' - (void)tearDown static int loaded = FALSE;如果(!loaded){NSThread sleepForTimeInterval:1.0]; loaded = TRUE; } [super tearDown]; } ' – AlexChaffee

+0

今天剛剛碰到這個,以爲我瘋了大聲笑,謝謝你的解釋! – Zhang

0

我與的XCode 4.6,其原因運行同樣的問題,在我的情況,是該計劃,並在測試服的實際單元測試之間的不一致。 在這個計劃中,我有一些正式的檢查,但在他們的.m文件中,一些單元測試被評論。

爲了解決這個問題:要麼取消對測試或取消該計劃的文件/西裝都將綠色再次:)

成爲人們喜歡我,忘了怎麼達到計劃這些都是必要的步驟:

  1. 右鍵點擊項目名稱在方案部分(從右到停止按鈕)
  2. 選擇編輯方案
  3. 選擇測試調試
  4. 點擊旁邊的單元測試項目的三角形,你旁邊有一個複選框,你放在單元測試在評論

希望這有助於

3

這個問題似乎是

  • 取消選中文件,每個文件您的測試終止過快,Xcode無法接收並解析指示失敗或成功的日誌消息。在最後的測試用例中運行1秒,對我來說可靠地工作,其中0.0沒有。要查看哪個測試用例是最後一個測試用例,請檢查Scheme對話框中的測試操作。

    我創建了一個單獨的WorkaroundForTestsFinishingTooFast測試條件下,一個方法:

    - (void)testThatMakesSureWeDontFinishTooFast 
    { 
        [NSThread sleepForTimeInterval:1.0]; 
    } 
    

    的問題是,當您添加更多的測試用例,你必須保證這個試驗是最後的方法運行。這意味着從測試操作中刪除並添加這個類作爲測試用例的重新排序是不允許的。另一方面,你只是將整個測試包延遲1秒。

  • +0

    我在'tearDown'中加入了延遲,不用擔心。 –

    2

    對我來說,解決方案是減少測試測試應用程序各部分的日誌輸出。我認爲xcode無法及時解析測試輸出,因爲我在整個應用程序中都有其他輸出。