iT邦幫忙

2022 iThome 鐵人賽

DAY 2
2

前言

單元測試是在應用程式中粒度最小的測試程式,這一系列文章的一開始就先來了解什麼是單元測試。

什麼是單元測試

在開發應用程式時,常會將不同職責的實作邏輯放置於不同方法中,單元測試就是以方法做為測試的範圍,來驗證程式是否與預期一樣。

在撰寫單一的單元測試程式時,除了只會針對一個方法或單一職責進行測試外,並不會包含任何邏輯實作,也不會使用到如網路、資料庫或是檔案等外部資源;且在各單元測試各自獨立,兩兩之間不會有任何的相依關係或是執行的順序性。因此在減少各種對象的相依性下,讓我們可以降低在撰寫測試程式的準備成本,進一步可以在應用程式被變更時,能更快更容易且隨時的執行測試程式來確認目標程式的正確性。

單元測試的撰寫

3A 原則是常在撰寫單元測試時所使用的依據,此原則說明了單元測試內應該有的三大部份:

  • 準備 (Arrange):針對測試目標物件初始化、需要傳入的參數資料或相依物件的準備等,都會撰寫在此部分。
  • 行動 (Act):在這部份就會去執行測試目標物件的方法。
  • 驗證 (Assert):最後就會將實際執行的結果與預期結果進行比對,來驗證目標物件的結果。

在實務上,我們會針對目標方法所回傳的結果,或是目標物件所記錄的狀態屬性值,來驗證是否與預期相同。但是現實總是比想像來得複雜,有時候目標物件方法會進一步呼叫其他相依的物件方法,甚至使用到網路等外部資源;最常見的例子是在前端頁面中,利用 Ajax 的方法去存取後端資料。因為單元測試不會相依於外部資源,所以在驗證上則會準備模擬存取後端的假物件,進一步去驗證目標物件與此假相依物件之間的互動。

接下來

這一篇很簡單的介紹什麼是單元測試以及 3A 原則,然而實際的撰寫才真去了解理譣的概念。接下來會先說明在 Angular 應用程式中,所用於撰寫測試程式的 Jasmine 框架與執行測試程式的 Karma。


上一篇
Day 1 - 序言
下一篇
Day 3 - 單元測試 - Angular 測試初探
系列文
今天我想來在 Angular 應用程式上加上測試保護30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言