[譯][祖傳] 2017 Swift 單元測試文章資源精華

沒故事的卓同學發表於2018-01-12

原文地址:A complete list of articles on Unit Testing with Swift from 2017

原文需翻牆。

無論你寫不寫測試,Swift 在社群的普及度已經越來越高。過去一年社群裡湧現了很多基於 Swift 的測試相關文章資源。下面我把我收集到的很大家分享一下。

在測試之前應該瞭解的事情

Engineering for Testability

如果你以前沒有寫過單元測試,那麼強烈建議你先看下這個 WWDC 17 上的視訊。在這個視訊了介紹了寫出可以被測試的程式碼的重要性。並且一步步演示瞭如何給模組解耦。同時也展示了很多給 app 建模和寫單元測試的技巧。從這個視訊瞭解單元測試會是一個很好的開端。

iOS Unit Testing and UI Testing Tutorial

這是一篇非常好的介紹如何用 Swift 寫測試的 guide 。介紹了幾個很核心的內容,比如如何在 Xcode 裡配置單元測試,如何 mock 資料物件。同時也介紹了一些進階的單元測試概念,比如效能測試和測試覆蓋率。

Stylish Developers Guide to Unit Testing in Swift

我應該在什麼時候開始寫測試程式碼?Jaim Zuber 在演講裡解釋了在專案裡引入測試的好處。當然也一步步演示瞭如何在實際專案中寫測試。如何測試 ViewControllers 、如何測試 Storyboard、如果沒有 mock 測試要如何進行,這些問題都能在演講裡找到答案。

TDD in Xcode Playgrounds

對 XCTest 不熟悉?害怕引入單元測試把專案搞亂?你也可以通過 playground 開始。在這個視訊裡,Paul Ardeleanu 會演示在 playground 裡寫幾個簡單的 XCTest case 。你一定能看懂,即使你沒聽說過 TDD 。

The complete guide to Network Unit Testing in Swift

現在你知道如何為模組解耦,如何寫 XCTestCase。然而你可能還是會困惑如何把這些技術應用在實踐裡。這篇教程介紹了廣泛使用的解耦技巧:依賴注入(Dependency Injection)。解釋瞭如何利用 DI 和 Swift protocol 去解耦網路層服務,如何給服務寫測試。

Testing iOS Apps

從某個角度來說很難完全掌握寫測試的技巧:要記住有太多的規則和模式。不過你也不用一口氣都學會這些。Krzysztof Zabłocki 列出了在你剛開始寫測試時需要注意的通用的概念和規則。記住這些準則,你就能寫出易維護的測試,並且長期受益。

Singleton, Service Locator and tests in iOS

Bohdan Orlov 比較了兩個經常被濫用的模式: Singleton 和 Service Locator。並且指出了為什麼兩個模式經常被濫用。也提供了基於兩種方式更優雅的寫單元測試的方式。對於解耦和重構老程式碼非常實用。

專業測試三十年

Testing an Untested App

如果你運氣好,整個專案都是你自己從零開始寫的。然而更多的時候你必須做一些團隊協作的工作,review 和修改一些別人的程式碼。在這樣的情況下,我們要怎麼給這些專案寫測試呢?在這個視訊裡,Michael May 和你一起做了一次現場 review 。他重構了一個老的專案,並且細緻的解釋了每行的重構思路。

Common unit testing techniques on iOS

學習技術並且不斷的練習是成為一個高階程式設計師的關鍵。

Swift 沒有一個 mocking 的框架,因為受限於語言的動態能力,純 Swift 物件的實現程式碼不能被改變。

Luciano Marisi 會告訴你如何達到這個目的。你會看到很多非常實用的技術。這些好用的模式在你寫測試的過程中會經常被用到。

Test Doubles In Swift

如果測試的物件有第三方依賴,引入第三方依賴就會加大測試的複雜度。所以模擬一份依賴的複製可以是測試變的簡單。這種代替依賴的物體叫做 Test Double(Google Testing Blog)。本文介紹了幾種建立 test double 的技術。

Waiting in XCTest

在軟體開發中處理非同步請求是家常便飯。Xcode 提供了很多類讓我們處理等待事件。本文對 XCTestExpectation 進行了全面的介紹。同時也介紹了使用過程中遇到的坑。讓你能夠完美的寫出針對非同步請求的測試。

Cracking the Tests for Core Data

很多人對怎麼樣給 Core Data 寫測試完全沒概念。在這篇文章裡,會簡要的介紹針對 Core Data 的測試技巧,包括在記憶體中的資料庫和 DI 。如果你用 Core Data 作為儲存層,但是不知道如何測試。這篇文章會告訴你答案。

Xcode unit tests with ⌘+S

在一個很大的專案裡跑測試會因為需要 rebuild 專案而花費很多時間。John Holdsworth 有一個很酷的神器:InjectionTDD 。InjectionTDD 會註冊新的實現而不需要重新編譯整個專案。Bartosz Polaczyk 會一步步演示如何使用 InjectionTDD。

祖傳祕籍

Time traveling in Swift unit tests

有的時候我們的程式碼會依賴於時間(比如快取的有效期是兩天)。但是在寫測試的時候很難模擬時間的變化。John Sundell 介紹了他如何進行“時空穿梭”來測試。

Reducing flakiness in Swift tests

測試程式碼也是程式碼。所以依然要在意測試的程式碼的質量。這篇文章會告訴你如何避免在測試程式碼中引入混亂。分享的三個 tip 在實際工作場景中都非常實用。

Tests that don’t crash

通常我們會覺得在測試的時候發生閃退沒什麼影響。因為不經常發生而且也不會影響到實際使用者。然而卻會影響到持續整合的流程:出現異常後面的測試就不會被執行了。Tim Vermeulen 展示瞭如何輕巧的解決這個問題,並且如何使異常展示的更加友好。

Testing and mocking without OCMock

你是否使用 OCMock ?沒有 OC 的動態優勢的 Swift 要如何 mock 呢? Jesse Squires 介紹了另外一種方式來解決這個問題。

Making Mock Objects More Useful

一旦你開始在實際專案中開始寫測試,你就發現設計 mock 物件並不像那些入門教程裡說的那麼簡單。實際上 mock 也和軟體產品一樣:他們應該可以被重用並且易維護(be reusable and maintainable)。OCMockito 的作者,Jon Reid 介紹了他在 mocking 物件的實踐經驗。介紹了很多實用的技術,對寫出高質量的 mock 和提高效率有很大幫助。

還有這種操作

Using protocol compositon for dependency injection

如果有好幾個依賴注入(DI)到單一實體上會顯得很笨重。Krzysztof Zabłocki 展示了另外一種操作:用合成 protocol 。

iOS Cookies — The Testing Section

iOS Cookies 收集了很多高質量的 Swift 庫。測試相關的這些庫不要錯過?。

Arek Holko 告訴你一個寫測試不可不知的小技巧

[譯][祖傳] 2017 Swift 單元測試文章資源精華

總結

作為一個剛入門的開發者,沒有一個 mentor 面對面教過我如何寫單元測試。然而感謝 Swift 社群,可以有這麼多充滿價值的資料可以讓我去學習。


歡迎關注我的微博:@沒故事的卓同學

掘金部落格地址:https://juejin.im/user/5624c86b60b2b199f7611227

如果想與我有更密切的交流也可以加入我的小密圈:程式設計師生存指南

相關文章