iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
0
Software Development

iOS App 實作開發新手村系列 第 26

Day26 重構好朋友-單元測試

  • 分享至 

  • xImage
  •  

20191012

前言

今天的內容是為我們前面的專案加上測試,採用Apple本身的測試框架,並撰寫一些基本的測試。

現在,我們馬上開始!

操作流程

準備工作

如果我們建立專案的時候,有勾選『Include Unit Tests』,則可以跳過這些步驟。

  1. 開啟專案設定,並點擊下方的『+』

  1. 往下找到Test區塊中的『Unit Testing Bundle』

  1. 確認沒問題後,點擊『Finish』

  1. 這邊可以看到已經基本的測試檔

  1. 點選上方選單來執行測試『Product => Test』,或是按下快速鍵『cmd + U』

  1. 跑完之後,旁邊的測試會顯示綠色

  1. 按下『cmd + 6』可以看到目前的測試方法與測試結果

測試檔案簡易說明

setUp()

此方法會在第一個測試之前執行,可以用來初始化一些設定

override func setUp() {
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

tearDown()

此方法會在最後一個測試後執行,可以寫一些釋放物件的程式碼

override func tearDown() {
    // Put teardown code here. This method is called
after the invocation of each test method in the
class.
}

testExample()

此為測試方法的範本,一般我們的測試方法都為void方法

func testExample() {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify
your tests produce the correct results.
}

testPerformanceExample()

此為效能測試的一個簡單例子

func testPerformanceExample() {
    // This is an example of a performance test case.
    measure {
        // Put the code you want to measure the time of
here.
    }
}

撰寫測試程式碼

透過前面的測試,我們已經初步跑過測試了。
現在,我們要開始來撰寫單元測試。

  1. 在測試導覽中,新增測試類

  1. 命名為『ToDoListModelTests』

  1. 點擊『Create』建立檔案

  1. 由於我們沒有做效能測試,testPerformanceExample()直接刪除

  2. 測試之前,我們先import來加入Model

@testable import ToDoList
  1. 加入一個測試方法
func testToDoListStart() {
    // given
    let category = "work"
    let status = "\(Status.ongoing)"
    
    // when
    let todoList = ToDoList()
    
    // then
    XCTAssertEqual(category, todoList.category)
    XCTAssertTrue(status == todoList.status)
    XCTAssertNil(todoList.endTime)
}
  • 由於目前的種類只有『work』,不會有其他case

  • ToDoList清單在啟動時,預設的狀態為『ongoing』

  • ToDoList啟動時,尚未有完成時間,因此為『nil』

  1. 按下『cmd + U』快速鍵,來執行測試,並確認測試結果

  • 如果測試要寫的完整,有許多地方需要搭配protocol的協助

  • 本文僅列出部分測試代碼,其餘部分請參考GitHub

測試相關快速鍵匯總

執行測試:
『cmd + U』

顯示測試導覽
『cmd + 6』

編譯測試
『cmd + shift + U』

不編譯直接測試
『ctrl + cmd + U』

執行當前測試
『ctrl + cmd + alt + U』

執行前一次的最後測試
『ctrl + cmd + alt + G』

總結

今天我們練習了執行專案的單元測試,也實際撰寫了簡單的幾個測試,由於作者並沒有許多iOS App開發經驗(學習中)。因此,撰寫的測試比較簡單。

而本次的內容參考了許多網路資料,也參考了『TDD Fake Book for iOS』- Dominik Hauser 這一本電子書,由於時間關係,作者尚未完整的拜讀完畢整本書籍,有興趣的讀者可以參考(ref4)的連結。此為付費的電子書。

今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  2. iOS 12 App 開發快速入門與實戰(繁體中文)
    https://www.udemy.com/course/ios-12-app/

  3. 心智圖軟體Xmind
    https://www.xmind.net/

[Unit Test]

  1. tddfakebookforios
    https://leanpub.com/tddfakebookforios

  2. iOS Unit Testing and UI Testing Tutorial
    https://www.raywenderlich.com/960290-ios-unit-testing-and-ui-testing-tutorial

  3. Swift的UITest和UnitTest怎麼寫?
    https://medium.com/@lihsinplayer/swift%E7%9A%84uitest%E5%92%8Cunittest%E6%80%8E%E9%BA%BC%E5%AF%AB-5758fda2c2e0

  4. swiftbysundell Unit Testing
    https://www.swiftbysundell.com/basics/unit-testing/

  5. Swift 開發:如何使用 Xcode 7 進行單元測試
    https://www.appcoda.com.tw/unit-testing-swift/

  6. 初探 iOS 的單元測試(Unit Test)
    https://ios.devdon.com/archives/775

  7. Unit Testing Model View Controller on iOS with Swift
    https://medium.com/@ali.aga_2866/unit-testing-model-view-controller-on-ios-with-swift-c010c132292d

  8. Unit-Testing a ViewController
    https://priteshrnandgaonkar.github.io/Unit-Testing-a-feature/


上一篇
Day25 實機測試
下一篇
Day27 橘皮貓與SwiftUI的邂逅 (電子書)
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言