iOS Unit Test 單元測試
上班第一天報到主管希望我透過UnitTest來暸解現有專案,
雖然過去沒有真的在專案上寫過UnitTest,但既然是任務當然就要完成
於是花了點時間。

在這就不特別說明如何新增Test 檔案
Google就有解答

首先要注意的是, @testable import GWUnitTestProject
原則上在新建專案時有勾選Test檔案產生就會自動幫你把專案import到Test裡面
如果是後來才新增的 Test就要記得補上這行 。
在一新開的測試檔中會看到四個function,分別是setUp()、tearDown()、testExample()及testPerformanceExample()
setUp()跟tearDown()是在每個測試運行時都會執行的function
setUp() -> testExample() ->tearDown()
setUp() -> testPerformanceExample() ->tearDown()
如果有需要預先運行或是測試後需要運行的程式放在這裡就對拉
此外所有要測試的func名稱必須要以test開頭作為命名才有辦法被Test,如:testLogin().testUserInfo().testUpdateUserInfo()...等當然以上只是舉例。相對的一般的func也就千萬不要加test當開頭否則Test時會被執行,也許某些結果就會受到影響。

先說明XCTAssert的用途,
XCTAssert稱為斷言,用來告訴系統()內的正確結果該是什麼來完成測試目的,
而斷言的函式有很多種,大部分都是相同的形式如比較、真假及強行失敗等
其中XCTAseert為通用斷言,其他常用的像是
- XCTAssertTrue(expression)
- XCTAssertFalse(expression)
- XCTAssertEqual(expression1, expression2)
- XCTAssertNotEqual(expression1, expression2) XCTAssertEqualWithAccuracy(expression1, expression2, accuracy) XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy) XCTAssertNil(expression)
- XCTAssertNotNil(expression)
- XCTFail(format...)
有的斷言會加format來敘述狀況,在範例中就沒有特別加。

在ViewController.swift可以看到我在裡面加了ㄧ個input*100的function和兩個閉包(sleep、dispatchTime),作為我們測試的目標對象。
測試主要分為兩個種類一種是邏輯上的測試,去驗證開發者的運算邏輯、單元邏輯等是否符合預期,另外一種是效能測試,主要測試閉包如Api的call back以確保與後端溝通沒有問題且有效率。
許多人覺得寫測試麻煩且沒意義,過去我也同樣有這樣的想法,主要是因為想偷懶找藉口但真的對於產品的質量有大幅度的提升。身為前端當今天產品出問題時透過單元測試馬上就能找出問題修正,如果是API不符合規範也能立刻知曉結果。
結語
在寫單元測試時,如果時間允許建議合作夥伴間互寫,雖然這樣會比較久但可以了解彼此的開發邏輯且較不會有思考方式相同而測試項目依賴了原本的程式,導致這份測試是無意義且不完全的結果。
附上 專案連結
