Figuring Out What to Test
通常情況下,單元測試需要包括:
1、核心功能:model類和方法以及與其交互的controller
2、最常見的UI工作流程
3、邊界條件
4、Bug修復(fù)
FIRST principles
首字母縮寫詞FIRST描述了有效單元測試的一組簡明標(biāo)準(zhǔn)蜈敢。這些標(biāo)準(zhǔn)是:
1、fast:測試應(yīng)該快速完成
2汽抚、Independent/Isolated:測試不應(yīng)互相共享狀態(tài)
3抓狭、Repeatable:每次運(yùn)行測試時,您應(yīng)該獲得相同的結(jié)果造烁。外部數(shù)據(jù)提供者或并發(fā)問題可能會導(dǎo)致間歇性故障否过。
4午笛、Self-validating:測試應(yīng)完全自動化。輸出應(yīng)該是“通過”或“失敗”苗桂,而不是依賴于程序員對日志文件的解釋药磺。
5、Timely:理想情況下煤伟,應(yīng)該在編寫要測試的生產(chǎn)代碼之前編寫測試
Unit Testing in Xcode
Creating a Unit Test Target
在Xcode中使用快捷鍵Command-6去打開Test navigator
點(diǎn)擊+號按鈕去添加單元測試對象
默認(rèn)模板給出setUp(),tearDown()兩個方法和兩個測試的例子方法
這里總共有3個方式來運(yùn)行測試:
1癌佩、Command-U來運(yùn)行所有的測試
2、在Test navigator中點(diǎn)擊箭頭按鈕
3便锨、在gutter中點(diǎn)擊菱形按鈕
在測試的方法中我們一般把代碼分成given,when和then三個部分
1围辙、Given:這一步,把需要用到的數(shù)值配置好
2放案、When:執(zhí)行需要測試的代碼
3姚建、Then:這一步你將捕捉你期望的結(jié)果,通過XCTestAssertion
func testScoreIsComputed(){
// 1. given
let guess = sut.targetValue + 5
// 2. when
sut.check(guess: guess)
// 3. then
XCTAssertEqual(sut.scoreRound,95,"Score computed from guess is wrong")
}
參考資料:https://www.raywenderlich.com/960290-ios-unit-testing-and-ui-testing-tutorial