2012-02-21 127 views
11

我有專門的章節我的代碼(例如在AppDelegate.m)不應該對單元測試進行編譯,就像的Xcode:爲條件調試/測試代碼預處理宏

#ifndef CONFIGURATION_TESTS 
// Code that should not be compiled in the Unit Tests 
#endif 

目標是建立當你在創建一個新項目時選擇'添加單元測試'時,通過Xcode。 在項目文件中,我已經將標誌CONFIGURATION_TESTS添加到MyAppTests Built-Target的預處理器宏中,但不添加到MyApp目標中。

這是我發現的很多帖子中的建議方式。

但這不起作用,因爲(我猜)MyAppTests目標將MyApp目標作爲依賴項,並且因爲AppDelegate.m被添加到MyApp目標中,所以它將與MyApp生成設置一起編譯,因此, CONFIGURATION_TESTS未定義。

在單元測試文件中的宏定義和行爲與預期(因爲測試文件只被MyAppTests構建目標?)

有誰知道如何做到這一點,我認爲這將是一個共同的問題...

+1

寫了一個詳細的一步一步的解釋比我有同樣的問題,不能弄明白 – shawnwall 2012-05-01 21:06:57

+0

「這不工作:1)CONFIGURATION_TEST總是真實的?2)從來沒有真正的?3)在單元測試但在應用程序中?4)在應用程序,但不是單元測試?(詢問頭腦想知道...) – geowar 2013-01-01 18:20:18

回答

11

我終於找到自己的答案:關鍵是要創建一個新的構建配置(讓我們稱之爲該配置測試)

然後,相應地配置預處理器宏的值,因此對於配置調試和發佈您設置CONFIGURATION_TESTS = 0併爲配置測試,您設置CONFIGURATION_TESTS = 1

最後,編輯單元測試架構以使用測試作爲構建組態。就是這樣:P

我在我的blog

+0

愚蠢的問題:爲什麼你需要CONFIGURATION_TESTS = 0非測試版本配置?我把這部分留下來,一切似乎都很好。 – 2014-05-15 04:57:22

3

您需要設置「CONFIGURATION_TESTS = 1」,而不僅僅是「CONFIGURATION_TESTS」