Swift 透過 Quick和Nimble 來寫 Unit Test

Zhi-Hong Lin
4 min readFeb 17, 2019

--

在撰寫測試的時候,基本原則是一次只測試一項 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),背景就會變成紅色,提醒我們應該要對這部份寫單元測試。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response