轉(zhuǎn):http://www.itdecent.cn/p/1616d9bfbb53
代碼覆蓋
代碼覆蓋率是Xcode7的一項(xiàng)功能,能夠顯示和測(cè)量你有多少的代碼執(zhí)行了測(cè)試。隨著你代碼的覆蓋你可以確定你的測(cè)試是不是達(dá)到了你預(yù)期的工作。
查看代碼覆蓋
當(dāng)你的代碼覆蓋以后,LLVM基于方法和功能的連通的頻率來(lái)收集覆蓋數(shù)據(jù)。代碼覆蓋率不但可以收集數(shù)據(jù)也可以看測(cè)試的正確性和性能測(cè)試報(bào)告,無(wú)論是單元測(cè)試還是UI測(cè)試。
你可以查看代碼覆蓋通過(guò)scheme’s編輯測(cè)試行為。
打開scheme編輯菜單。

選擇editor scheme。
啟用代碼覆蓋復(fù)選框來(lái)收集覆蓋數(shù)據(jù)。

單擊close。
注意:代碼覆蓋率啟用之后會(huì)在性能上有一些損失。無(wú)論損失是否顯著,都影響了代碼的執(zhí)行,但是線性方式使性能測(cè)試仍然可以進(jìn)行比較。試運(yùn)行的時(shí)候啟用它。你應(yīng)該考慮是否啟用代碼覆蓋率,當(dāng)你對(duì)應(yīng)用程序進(jìn)行測(cè)試的時(shí)候。
如何規(guī)范代碼覆蓋
代碼覆蓋率是衡量你的測(cè)試的價(jià)值的工具。它回答了一些問(wèn)題:
當(dāng)你運(yùn)行的你的測(cè)試的時(shí)候有多少代碼是被運(yùn)行的。
多少的測(cè)試代碼才滿足測(cè)試。換句話說(shuō)就是,你有足夠的測(cè)試框架,確保你所有的代碼被檢查(正確性和性能)。
哪部分代碼沒(méi)有被測(cè)試到。
測(cè)試運(yùn)行以后Xcode取得LLVM得到的覆蓋數(shù)據(jù),并使用這些數(shù)據(jù)來(lái)穿件一個(gè)報(bào)表導(dǎo)航覆蓋報(bào)告,在覆蓋窗格中可以看到。它顯示了測(cè)試運(yùn)行的概要信息,在文件中列出了源文件和函數(shù)的列表以及,每一個(gè)的覆蓋率。

源代碼的右側(cè)顯示了每一行代碼的未執(zhí)行技術(shù)。它強(qiáng)調(diào)了需要覆蓋在沒(méi)有覆蓋的代碼的區(qū)域。

覆蓋的注解繪制在右側(cè),顯示了代碼的特定部分進(jìn)行了多少次的測(cè)試在測(cè)試期間的計(jì)數(shù)。

有一些方法沒(méi)有在測(cè)試中調(diào)用,這些方法會(huì)明顯的顯示在源代碼編輯器中。

自動(dòng)化測(cè)試流程
在開發(fā)過(guò)程中除了以交互方式運(yùn)行測(cè)試外,還可以充分采取使用Xcode Server進(jìn)行自動(dòng)化測(cè)試。
基于Server的持續(xù)集成測(cè)試
Xcode測(cè)試具有交互性,他能確保你的代碼在其指定的需求下不偏離正確的軌道,并且可以簡(jiǎn)單的找到并修復(fù)BUG。一系列快速運(yùn)行的功能測(cè)試不僅可以校正你的工作,還可以讓你高效率的自信的構(gòu)建一個(gè)健壯的程序。
這就是說(shuō),成功的開發(fā)項(xiàng)目往往超出單個(gè)開發(fā)人員實(shí)現(xiàn)和維護(hù)的能力范圍。像源碼管理,服務(wù)器上的自動(dòng)化測(cè)試可讓你順利搞笑的根據(jù)團(tuán)隊(duì)的需求進(jìn)行開發(fā)工作。通過(guò)Xcode Server,Xcode支持基于服務(wù)器的持續(xù)集成工作流。Xcode Server適用于OS X Server,可以自動(dòng)化應(yīng)用程序的構(gòu)建、分析、測(cè)試以及歸檔的一體化過(guò)程。
下面是基于Server測(cè)試的一些優(yōu)點(diǎn):
使用服務(wù)器可以進(jìn)行脫機(jī)構(gòu)建和測(cè)試,以緩解開發(fā)系統(tǒng)做實(shí)施和調(diào)試的壓力,特別是在全方位測(cè)試時(shí)可能需要很長(zhǎng)的時(shí)間來(lái)執(zhí)行。
開發(fā)團(tuán)隊(duì)的所有成員使用相同的scheme可在服務(wù)器上運(yùn)行相同的測(cè)試,從而提高測(cè)試的一致性,整個(gè)團(tuán)隊(duì)也可以構(gòu)建產(chǎn)品,就像構(gòu)建測(cè)試報(bào)告。
你可以靈活調(diào)整項(xiàng)目需求和團(tuán)隊(duì)的需求。比如,當(dāng)項(xiàng)目中任意一個(gè)成員向源代碼管理系統(tǒng)提交新工作或者在設(shè)定的時(shí)間定期提交時(shí)測(cè)試運(yùn)行就可以了。測(cè)試運(yùn)行也可以按照需要手動(dòng)啟動(dòng)。
服務(wù)器以同樣的方式反復(fù)運(yùn)行測(cè)試。隨著時(shí)間的推移,服務(wù)器的報(bào)告可以讓你和你的團(tuán)隊(duì)對(duì)構(gòu)建過(guò)程中的問(wèn)題、警告以及測(cè)試解決方案有個(gè)整體的輪廓。
你的項(xiàng)目可以有更多的目的進(jìn)行測(cè)試,更具自動(dòng)性,而且比收訂運(yùn)行測(cè)試系統(tǒng)更加經(jīng)濟(jì)。例如你可以有任意數(shù)量的iOS設(shè)備連接到服務(wù)器,使用單一的配置,該系統(tǒng)可以構(gòu)建和測(cè)試庫(kù)、應(yīng)用程序、所有測(cè)試以及iOS模擬器的多個(gè)版本。
注意:當(dāng)你的項(xiàng)目工作橫跨iOS和Mac iOS X時(shí),應(yīng)用就會(huì)有兩個(gè)約束:
OS X項(xiàng)目構(gòu)建和測(cè)試時(shí)服務(wù)器必須處于運(yùn)行中。
iOS和OS X的項(xiàng)目需要各自不同的scheme和bot。
命令行測(cè)試
使用Xcode的命令行測(cè)試,可以編寫自動(dòng)化腳本來(lái)構(gòu)建和測(cè)試你的項(xiàng)目。通過(guò)使用此功能,你可以充分利用現(xiàn)有的構(gòu)建自動(dòng)化系統(tǒng)的優(yōu)勢(shì)。
使用XcodeBuild運(yùn)行測(cè)試
XcodeBuild命令行工具像Xcode IDE和OS X Server中的Xcode服務(wù)一樣驅(qū)動(dòng)測(cè)試。使用BuildAction運(yùn)行XcodeBuild測(cè)試。用-destination參數(shù)指定不同的測(cè)試目的。例如要在本地OS X“my Mac 64 Bit”測(cè)試MyApp,
使用如下命令來(lái)指定目標(biāo)和框架:
?? ? xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=OS X,arch=x86_64'
如果你有development-enabled設(shè)備插入,你可以按照名稱或者id調(diào)用它們。例如,如果你有一個(gè)名為“Development iPod touch”的iPod設(shè)備連接了測(cè)試代碼,可以使用下面的命令來(lái)測(cè)試代碼:
?? ? xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=iOS,name=Development iPod touch'
測(cè)試也可以在iOS模擬器上運(yùn)行。使用模擬器可以應(yīng)對(duì)對(duì)不同的機(jī)型因素和操作系統(tǒng)版本。
?? ? xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone,OS=8.1'
-destination參數(shù)可以被連接在一起,這樣你只需要一個(gè)命令,就可以跨目標(biāo)進(jìn)行指定集成共享方案。例如下邊的例子就是將上面的三個(gè)例子合在了一個(gè)命令當(dāng)中:
?? ? > xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp
-destination 'platform=OS X,arch=x86_64'
-destination 'platform=iOS,name=Development iPod touch'
-destination 'platform=Simulator,name=iPhone,OS=9.0'
如果測(cè)試失敗,XcodeBuild將返回一個(gè)非零的退出代碼。
這些都是你所需要了解的命令行運(yùn)行測(cè)試的要領(lǐng)。有關(guān)XcodeBuild更詳細(xì)的信息,請(qǐng)?jiān)诮K端的應(yīng)用程序窗口中使用命令進(jìn)行查找。
?? ? man xcodebuild
在XcodeBuild中使用ssh
調(diào)用XcodeBuild從ssh遠(yuǎn)程登陸(或者demon發(fā)射)失敗,除非你在主機(jī)建立一個(gè)正確的會(huì)話環(huán)境。
當(dāng)你作為一個(gè)用戶以交互方式登陸到你的OS X系統(tǒng)時(shí)需要?jiǎng)?chuàng)建一個(gè)“Aqua session”環(huán)境。Aqua session初始化基礎(chǔ)框架在OS X交互環(huán)境下,為了能夠運(yùn)行OS X App這個(gè)是必須的。更多的特性,代碼使用UI frameworks(AppKit or UIKit)也需要在“Aqua session”運(yùn)行。因?yàn)檫@個(gè)有必要的,OS X的測(cè)試(模擬器的測(cè)試,OS X的app)都要求“Aqua session”。
默認(rèn)的情況下,創(chuàng)建一個(gè)命令行使用ssh登陸到OS X系統(tǒng)是不能運(yùn)行會(huì)話的。當(dāng)你使用ssh登陸的時(shí)候你必須確?!癆qua session”被創(chuàng)建,你必須有一個(gè)用戶登陸到了一個(gè)遠(yuǎn)端的OS X主機(jī)系統(tǒng)。一個(gè)用戶存在運(yùn)行在一個(gè)遠(yuǎn)端系統(tǒng)在“Aqua session”通過(guò)ssh登陸。
用戶第一次運(yùn)行在這個(gè)主機(jī)系統(tǒng),運(yùn)行XcodeBuild通過(guò)ssh登陸的方式進(jìn)行測(cè)試。下邊是通過(guò)遠(yuǎn)端的主機(jī)運(yùn)行一個(gè)測(cè)試app“MyApp”通過(guò)ssh:
?> ssh localhost
?> cd ~/Development/MyAppProject_Folder
?> xcodebuild test -project MyApp.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone 6'
參考:technical notes a target="_self" Daemons and Agents/a and a target="_self" Daemons and Services Programming Guide。
使用 Xcode Server 和 Continuous Integration
使用Xcode
Server和持續(xù)集成的工作流可以設(shè)計(jì)無(wú)縫和透明的交互式開發(fā)。在使用基于服務(wù)器的持續(xù)集成過(guò)程中,很多工作都花在服務(wù)器和項(xiàng)目的安裝配置上,在這里我們簡(jiǎn)要描述一下。在開始使用
Xcode Server
和持續(xù)集成系統(tǒng)時(shí),僅需三個(gè)高級(jí)任務(wù)。此后,該任務(wù)要做的顯示正在進(jìn)行的監(jiān)測(cè)結(jié)果和進(jìn)行不定期的維護(hù)。這個(gè)概述簡(jiǎn)要地總結(jié)了這些任務(wù),更詳細(xì)的信息可在
“Xcode Continuous Integration Guide” 中查看。
用戶界面測(cè)試
UI測(cè)試可以讓你驗(yàn)證UI元素的屬性和狀態(tài),也可以讓界面間進(jìn)行交互。
UI測(cè)試包括UI記錄,UI測(cè)試讓你有能力讓你在你的App中通過(guò)一些方式進(jìn)行演習(xí),你也可以通過(guò)UI測(cè)試工具來(lái)擴(kuò)展。
這個(gè)記錄讓UI測(cè)試得到了更多的詳細(xì)信息,包含測(cè)試不通過(guò)的時(shí)候的屏幕的快照。
UI測(cè)試包括兩個(gè)核心技術(shù):XCTest framework and Accessibility。
XCTest提供框架具有UI測(cè)試的功能,和Xcode兼容。創(chuàng)建和使用UI測(cè)試擴(kuò)展根據(jù)你會(huì)XCTest和單元測(cè)試的程度。你可以在你的工程里創(chuàng)建一個(gè)UI測(cè)試target、UI測(cè)試類、UI測(cè)試方法。你使用XCTest斷言驗(yàn)證你的預(yù)期是否正確。你也可以集成一個(gè)Xcode
Server和XcodeBuild。XCTest充分的兼容Object-C和Swift。
Accessibility是技術(shù)的核心,可以讓殘疾用戶得到和一般用戶一樣的體驗(yàn)。它包含很多語(yǔ)義的數(shù)據(jù)用戶可以通過(guò)指引使用你的App。Accessibility是UIKit和APPKit的綜合有很多API允許你調(diào)整一些行為讓一些功能暴露在表面進(jìn)行使用。UI測(cè)試使用這些數(shù)據(jù)實(shí)現(xiàn)這些功能。
在源代碼里創(chuàng)建一個(gè)UI測(cè)試類似與單元測(cè)試。你創(chuàng)建一個(gè)UI測(cè)試target在你的app中;Xcode默認(rèn)創(chuàng)建一個(gè)UI測(cè)試組和實(shí)現(xiàn)文件,在實(shí)現(xiàn)文件里寫了測(cè)試方法的模版。當(dāng)你創(chuàng)建一個(gè)UI測(cè)試target,你可以指定你要測(cè)試的app。
UI測(cè)試的工作遠(yuǎn)離是找到一個(gè)應(yīng)用程序的用戶界面與查詢對(duì)象、綜合時(shí)間并派發(fā)它們到這些對(duì)象。提供了很多的API使你能夠檢查用戶界面對(duì)象的屬性和狀態(tài)對(duì)他們進(jìn)行比較確定是不是你期望的狀態(tài)。
要求
UI測(cè)試不僅依賴第三方工具的服務(wù)和API也需要OS平臺(tái)。你需要Xcode7,OS X 10.11 EL Capitan和iOS9。UI測(cè)試保護(hù)隱私:
iOS設(shè)備需要能夠開發(fā)、連接到信任的主機(jī)。
OS X需要允許授權(quán)對(duì)與一些特殊的App在Xcode中。在界面測(cè)試第一次運(yùn)行的時(shí)候會(huì)自動(dòng)提示你。
概念和API
界面測(cè)試和單元測(cè)試的基本原理不同。單元測(cè)試可以讓你在程序的范圍能夠完全的訪問(wèn)內(nèi)部的方法、變量、狀態(tài)進(jìn)行一些測(cè)試。界面測(cè)試可以讓你通過(guò)相同的方式使用app內(nèi)部的方法、功能和變量。這使你的測(cè)試通過(guò)相同的方式揭露UI和用戶遇到的問(wèn)題。你的測(cè)試代碼、綜合時(shí)間、用戶界面作為一個(gè)單獨(dú)的用用程序運(yùn)行。
APIs
XCUIApplication。
XCUIElement。
XCUIElementQuery。
開始使用UI記錄
開始使用UI記錄。他產(chǎn)生的源代碼轉(zhuǎn)換成可以被編輯來(lái)構(gòu)建測(cè)試或回放一個(gè)也定場(chǎng)景的測(cè)試的實(shí)現(xiàn)文件。UI記錄也是非常有用的對(duì)于探索新的用戶界面或?qū)W習(xí)如何編寫UI測(cè)試。操作的基本順序如下:
使用測(cè)試導(dǎo)航面板,創(chuàng)建UI測(cè)試target。
在所創(chuàng)建的文件中,將光標(biāo)移動(dòng)到測(cè)試功能。
啟動(dòng)UI記錄。
該程序啟動(dòng)和運(yùn)行。行使程序做UI操作的序列。Xcode捕捉函數(shù)體的行動(dòng)納入數(shù)據(jù)。
當(dāng)你要測(cè)試的動(dòng)作完成以后,停止錄制UI。
添加X(jué)CTest斷言數(shù)據(jù)。
編寫UI測(cè)試
API測(cè)試可以同時(shí)進(jìn)行功能測(cè)試和性能測(cè)試,所以可以進(jìn)行UI測(cè)試。UI測(cè)試在應(yīng)用程序的界面進(jìn)行操作,很多簡(jiǎn)單的功能都集成到界面測(cè)試?yán)餃y(cè)試是不是預(yù)期的表現(xiàn)和反應(yīng)。
UI測(cè)試從事件的響應(yīng)級(jí)別進(jìn)行操作:
查找到一個(gè)元素。
知道一個(gè)元素的預(yù)期行為。
點(diǎn)擊或點(diǎn)擊該元素引起反應(yīng)。
衡量是不是響應(yīng)了預(yù)期的行為。
創(chuàng)建一個(gè)UI測(cè)試通過(guò)XCTest創(chuàng)建和單元測(cè)試一樣的編程模型。類似的操作和編程方法的整體使用,給出UI測(cè)試的API基本概念,以及它們?nèi)绾芜\(yùn)作。
在測(cè)試類結(jié)構(gòu)提供setup方法,和單元測(cè)試類不相同。
- (void)setUp {? ? [supersetUp];// Put setup code here. This method iscalled before the invocation of each test method in the class.self.continueAfterFailure =NO;? ? [[[XCUIApplicationalloc] init] launch];}
Self.continueAfterFailure值默認(rèn)值設(shè)置為NO。一個(gè)正確的UI測(cè)試依賴于前一個(gè)測(cè)試的成功。如果一個(gè)測(cè)試失敗,下邊的所有測(cè)試失敗就因?yàn)樽钋斑叺臏y(cè)試失敗。
另外setup方法包括創(chuàng)建實(shí)例XCUIApplication并啟動(dòng)它。UI測(cè)試必須啟動(dòng)它來(lái)進(jìn)行測(cè)試,并缺都在setup方法的測(cè)試方法之前運(yùn)行,這確保了應(yīng)用啟用下邊的測(cè)試。
編寫UI測(cè)試方法的時(shí)候你應(yīng)該使用UI錄制功能創(chuàng)建一個(gè)測(cè)試的步驟。你的目的就是編輯這個(gè)基本的序列,使用XCTest斷言確定是不是一個(gè)成功或者失敗的單元測(cè)試。UI測(cè)試可以同時(shí)測(cè)試功能和性能就像單元測(cè)試一樣。
保證一個(gè)正確的UI測(cè)試一般模式如下:
使用XCUIElementQuery找到下一個(gè)XCUIElement。
合成一個(gè)事件并將其發(fā)送到XCUIElement。
使用斷言的XCUIElement的狀態(tài)比較預(yù)期的參考狀態(tài)。
附錄A:編寫可測(cè)試的代碼
Xcode集成了對(duì)測(cè)試的支持,使您能夠構(gòu)建測(cè)試包,以支持各種不同方式的開發(fā)工作。使用測(cè)試,可以發(fā)現(xiàn)代碼中潛在的回歸,并測(cè)試預(yù)期的成功與否,并驗(yàn)證應(yīng)用程序的行為。通過(guò)確保對(duì)象能以預(yù)期的方式運(yùn)行,測(cè)試能提高代碼的穩(wěn)定性。
當(dāng)然,通過(guò)測(cè)試讓程序達(dá)到穩(wěn)定的水平也取決于你寫的測(cè)試的質(zhì)量。同樣,編寫良好測(cè)試的難易度也取決于你的編碼方式。專為測(cè)試設(shè)計(jì)的代碼編寫有助于編寫良好的測(cè)試。閱讀下面的指南,以確保你的代碼是可測(cè)試的,以有效減小編寫良好測(cè)試的難度。
指南
定義API的需求。
為添加到項(xiàng)目中的每個(gè)方法或者函數(shù)定義,需求和結(jié)構(gòu)都非常重要。對(duì)于需求,包括輸入和輸出范圍,exception拋出異常、條件限制以及返回值的類型(尤其如果值是實(shí)例的時(shí)候)。定義要求并確保滿足代碼中的需求可以幫助你編寫出健壯的安全的代碼。
邊寫邊側(cè)
每當(dāng)你設(shè)計(jì)和編寫出一個(gè)方法或函數(shù)時(shí),就應(yīng)該編寫一個(gè)或多個(gè)測(cè)試用例來(lái)確保API的需求得到滿足。記住,為現(xiàn)有代碼編寫測(cè)試要比你為正在編寫的代碼難得多。
檢查邊界條件
如果對(duì)一個(gè)方法的參數(shù)值必須在特定的范圍內(nèi),你的測(cè)試應(yīng)包括該范圍的最低和最高值。例如如果一個(gè)程序有一個(gè)整數(shù)參數(shù),那么該參數(shù)值的范圍要在0和100之間(包括首尾值),該方法的測(cè)試代碼應(yīng)該為參數(shù)傳遞0,50和100這些值。
使用negative測(cè)試
negative測(cè)試可以確保你的代碼能夠適當(dāng)?shù)仨憫?yīng)出錯(cuò)的條件。當(dāng)收到無(wú)效的或意外的輸入值時(shí),它可以驗(yàn)證代碼的行為。同樣的,還可以驗(yàn)證它返回錯(cuò)誤代碼或者引發(fā)異常的行為。例如,如果一個(gè)證書參數(shù)范圍必須為1?100(包含首尾值),創(chuàng)建測(cè)試用例并傳值-1和101,以確保該程序能夠引發(fā)出一個(gè)異常或者返回一個(gè)錯(cuò)誤代碼。
編寫全面的測(cè)試用例。
全面的測(cè)試通過(guò)結(jié)合不同的代碼模塊來(lái)實(shí)現(xiàn)API的一些更復(fù)雜的行為。雖然簡(jiǎn)單,隔離測(cè)試提供值,堆疊測(cè)試表現(xiàn)復(fù)雜行為,這樣能捕獲更多的問(wèn)題。這些類型的測(cè)試在更現(xiàn)實(shí)的條件下模擬你的代碼的行為。例如除了將對(duì)象添加到數(shù)組,你還可以創(chuàng)建數(shù)組為之添加幾個(gè)對(duì)象,使用不同的方法刪除若干對(duì)象,然后確保集合以及其余對(duì)象的數(shù)量是正確的。
使用測(cè)試用例覆蓋BUG修復(fù)
每當(dāng)你修復(fù)完一個(gè)BUG,都要編寫一個(gè)或者多個(gè)測(cè)試用例,來(lái)驗(yàn)證此次修復(fù)的有效性。
附錄B:從OCUnit過(guò)度到XCTest
XCTest是Xcode5中新引入的一個(gè)測(cè)試框架。XCTest是上一代測(cè)試框架OCUnit的更現(xiàn)代化的實(shí)現(xiàn)。XCTest提供了與Xcode更好的集成并且奠定了未來(lái)改進(jìn)Xcode測(cè)試能力的基礎(chǔ)。XCTest的許多功能都類似與之前的OCUnit。
OCUnit和XCTest兼容性
自從Xcode2.1以來(lái),OCUnit都是Xcode測(cè)試的基礎(chǔ),所以很多現(xiàn)有的項(xiàng)目都是基于OCUnit測(cè)試。它們可以繼續(xù)使用,因?yàn)閄code5為基于OCUnit和XCTest的兩種項(xiàng)目提供了等同的功能。
將基于 OCUnit 測(cè)試的現(xiàn)有項(xiàng)目從 Xcode 5 之前的版本添加進(jìn) Xcode 5中時(shí),項(xiàng)目會(huì)兼容當(dāng)前 iOS 和 OS X 版本,同樣的,iOS 7之前的版本以及 OS X v10.8 之前的版本也是如此。
基于 OCUnit 的測(cè)試可以在 iOS 6 和 iOS 7 上運(yùn)行,所以針對(duì)iOS 和 OS X 舊版本的項(xiàng)目仍然能有效地選擇使用 OCUnit。當(dāng)你需要把項(xiàng)目從 Xcode 5 回歸至早期版本的Xcode,并對(duì)應(yīng)用程序進(jìn)行維護(hù)時(shí),這也不失為一個(gè)很好的選擇。
如果你的項(xiàng)目開發(fā)工作主要集中于 iOS 7 或更高版本,或在 OS X v10.8 或更高版本,或兩者兼而有之,把項(xiàng)目轉(zhuǎn)為使用 XCTest 將是一個(gè)正確的選擇。
注意:OCUnit在Xcode5.1中被標(biāo)記為已過(guò)時(shí)。
從OCUnit過(guò)渡至XCTest
從 OCUnit 到 XCTest 的轉(zhuǎn)換是一個(gè)復(fù)雜的操作,包括更新源文件,其中包括測(cè)試類和修改項(xiàng)目配置設(shè)置。Xcode5 中有一個(gè)轉(zhuǎn)換工作流程的助手可幫你實(shí)現(xiàn)這些轉(zhuǎn)換,選擇 Edit > Refactor > Convert OCUnit? to XCTest。使用該工具來(lái)成功地將項(xiàng)目遷移使用 XCTest。
OCUnit 到 XCTest 轉(zhuǎn)換工具是基于target-by-target的。該工具會(huì)檢查你選擇的目標(biāo),并且在執(zhí)行自動(dòng)轉(zhuǎn)換后讓你知道它們是否可以用XCTest運(yùn)行。
注意:建議你進(jìn)行OCUnit到XCTest遷移時(shí),將所有的target放到一個(gè)項(xiàng)目中。
把項(xiàng)目從OCUnit更新到XCTest:
工具tabbar上選擇編輯菜單。

在出現(xiàn)的菜單中選擇一個(gè)方案。

選擇Edit > Convert > To XCTest。

點(diǎn)擊下一步,進(jìn)入到下一個(gè)工作表。
在出現(xiàn)的工作表中選擇測(cè)試target

一個(gè)特定的目標(biāo)將建立XCTest轉(zhuǎn)換后,單擊其名稱。
單擊下一步按鈕。彈出一個(gè)FileMerge界面,你可以通過(guò)文件對(duì)比評(píng)估源碼的更改。

左邊是更新后的源文件,右邊是原始文件。你可以瀏覽所有可能的變化,并丟棄那些你覺(jué)得有問(wèn)題的代碼。
如果你對(duì)所有的更改都滿意,就可以單擊保存按鈕。Xcode會(huì)把更改寫入文件。
手動(dòng)的從OCUnit轉(zhuǎn)換到XCTest
如果一些項(xiàng)目中OCUnit不能自動(dòng)的轉(zhuǎn)換到XCTest,你就需要手動(dòng)的去轉(zhuǎn)換,步驟如下:
添加一個(gè)新的XCTest測(cè)試target在這個(gè)項(xiàng)目中。
在你的測(cè)試文件中增加測(cè)試類和測(cè)試方法。
編輯你的測(cè)試類引入#import XCTest/XCTest.h在你的方法里使用斷言。
使用這種方法可以確保項(xiàng)目設(shè)置是正確配置XCTest target。