Swift 透過 Quick和Nimble 來寫 Unit Test
在撰寫測試的時候,基本原則是一次只測試一項 function,同時一個 test case 會包含所謂的 AAA 原則:
● Arrange(建立物件,進行設定)
● Act(操作物件)
● Assert(某件事符合預期)。
那在單元測試時應該要測哪些內容呢?單元測試側重的是邏輯測試和接口測試,以下幾個部分可以參考進行測試
●公共類別中的公開方法
●網路數據層
●業務邏輯層
●修復 Bug 的測試
ok讓我們直接進入主題啦,如果沒有在專案一開始就加入 unit test的話,可以在 Targets 加入測試的 Bundle。

然後透過 cocoapods 來安裝 Quick 和 Nimble,如下通過 def xxx end 来包裹pod 命令,這樣該 def 可以被用於相同的 target。

▼編寫第一個 Test
刪除原先的 XCTest 程式碼, 導入 Quick 和 Nimble 套件,接著引入 @testable import 此專案名稱,並繼承 QuickSpec,宣告一個 override function spec()
,我們會在這個 function 裡定義一套 Examples and Example Groups。

@testable import 此專案名稱
//這行是為了在 Unit Test 的 Test Class 取到專案中所有的 Object,進而測試內部的 Unit
describe closure 裡開始我的第一個 test case。
beforeEach closure 會在 describe closure 中執行,在每個 test case 開始之前會先運行這段程式碼。

接著我們可以在 beforeEach 之後添加我們的 test assertion,預期這個 cycleView 是 nil 的還不是,現在讓我們按下CMD + U來運行測試。

我們可以在 Report Navigator,觀察測試案例是否成功通過

▼Code coverage
在進行測試前,我們可以確認 code coverage 是否被打開,預設是關閉的。因此可以透過 Xcode 的 menu bar 點擊 Product ->Scheme -> Edit Scheme,會看到以下畫面,選擇 Test -> Options 然後確保 Gather coverage for 是被選中的。

接著進行單元測試後,我們會在 Report Navigator 看到所有 test case 的結果,這裡就可以看到有一個顯示 Coverage 的分頁,顯示每個檔案的覆蓋率是多少。

選擇任一檔案進去,便可以看到在畫面的最右方,可以看到每行程式在 test case 中被執行了幾次,如果沒有執行到(執行次數為 0),背景就會變成紅色,提醒我們應該要對這部份寫單元測試。
