2013-11-14 77 views
14

我發現了一個名爲「xctest」的命令行工具,它顯然可以在您的項目中運行單元測試。此可執行住在這裏:如何使用Xcode 5從命令行運行xctest?

/Applications/Xcode.app/Contents/Developer/usr/bin/xctest 

當我嘗試在我的xctest束運行這個可執行文件,我使用的是:

$ ./xctest /Users/myusername/Library/Developer/Xcode/DerivedData/MyApp-abcdefghijklmnop/Build/Products/Debug/MyAppTests.xctest 

不過,我得到以下輸出:

Test Suite '(null)' started at 2013-11-14 21:16:45 +0000 
Test Suite '(null)' finished at 2013-11-14 21:16:45 +0000. 
Executed 0 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds 

據我所知,沒有關於xctest的手冊頁,但是在命令行中輸入./xctest得到:

Usage: xctest [--test Self | All | None | <TestCaseClassName/testMethodName>] <path of unit to be tested> 

特別是,我希望能夠在測試類中測試一個特定的方法,這就是爲什麼我想使用這個xctest命令。

我看到有從運行像在命令行中的所有測試方式:

$ xcodebuild test -scheme MyApp 

這將運行所有的單元測試,工作正常(我看到我的單元測試結果,使用時不像xctest)。但我感興趣的是能夠從命令行運行單個的測試方法,如:

$ ./xctest --test MyAppTests/testExample /Users/myusername/Library/Developer/Xcode/DerivedData/MyApp-abcdefghijklmnop/Build/Products/Debug/MyAppTests.xctest 

回答

5

儘管什麼用法消息說-XCTest是你需要的參數:

xctest -XCTest MyAppTests/testExample testbundle.xctest 

對於直接調用xctest工作,您可能還需要將DYLD_FRAMEWORK_PATHDYLD_LIBRARY_PATH設置爲您的構建產品目錄。一般來說,您需要使用與Xcode相同的參數和環境,您可以通過在其中一個測試中放置斷點,通過Xcode運行它們,然後打印出argumentsenvironment的值爲[NSProcessInfo processInfo]來看到這一點。

爲了避免混淆所有注意事項,您還可以修改Xcode中的方案以僅運行特定的測試。在產品>方案>編輯方案下,選擇測試操作並展開測試包。您可以使用複選框選擇要運行的測試,然後xcodebuild的測試操作將只運行這些測試。

+1

謝謝!實際上,我不需要爲DYLD_FRAMEWORK_PATH和DYLD_LIBRARY_PATH設置環境變量。我需要確保在Build/Products/Testing中有正確的xctest bundle位置,而不是Build/Products/Debug。所以我的路徑如下所示:./xctest -XCTest MyTestClass/testMyTestFunction /Users/username/Library/Developer/Xcode/DerivedData/MyApp-abcdefghikjklmn/Build/Products/Testing/MyAppTests.xctest –

+0

感謝關於禁用測試的提示方案。您可以選擇多行並使用空格鍵切換選擇 - 非常有用! – funroll