iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Kotlin

Kotlin魔法:Spring Boot 3的fp奇幻冒險系列 第 29

[城鎮] 五種Test Double - Dummy、Stub、Fake

  • 分享至 

  • xImage
  •  

前情提要

我們昨天介紹了Test Double的概念,今天要來更進一步地介紹Dummy、Fake、Stubs ,他們之間的差別。

兩大陣營: Mock、Stub

Test Double可以分為兩大陣營,Mock與Stub

Mock

Mock是用來驗證並模擬互動結果的工具。
Mock、Spy屬於這邊

Stubs

Stubs則是模擬數值或是回傳數值的工具。
Stub、Dummy、Fake屬於這邊

Dummy Object

通常是指做虛擬的、空的、或者是用於填充的物件,為了滿足某些需求而存在。比如說我們要測試一個物件,而這個物件需要傳入一些物件當作參數才能建構時,我們就需要塞入假的資料,讓他可以正常的建構起來,而這些物件可能在我們的這個測試情境完全不會用到,只是為了要滿足建構條件,這就叫做Dummy Object。

以測試製作漢堡來說! 我們需要將兩塊麵包之間塞入菜、肉等配料才叫做漢堡,我們如果只想測試漢堡是否有兩塊麵包,那麼中間塞的那些料就是Dummy Object了,我們不在意塞了甚麼東西,只在意有做出漢堡這件事情。

Stub Object

Stub跟Dummy很像,就是做虛擬的、空的、或者是用於填充的物件,但它實際會被用到!要測試是否有拿到假的資料。

再拿製作漢堡做例子,今天我們想測試我們做的漢堡是否有麵包而且還有生菜,我們這時候就把生菜先固定起來Stub! 然後專心看我們有沒有放麵包,這樣是否有放生菜就不影響我們的測試,因為Stub已經幫我們放生菜了,我們就可以專心看有沒有放麵包這件事情。
當然我們也要驗證最後的漢堡是否有麵包和生菜,不然Stub就沒用啦XD

Fake Object

它很像是一個輕量化的DOC!會建立出簡單的DOC給我們的程式使用,比如說它會Fake一個假的DB,當我們call getData時,它就會固定回某個值回去。它就像是取代原本的Function,用我們重新寫的假Function來做事情。

製作漢堡來說,我們可以Fake一個擠番茄醬機器人,它會固定幫我們的漢堡擠固定量的番茄醬,這樣就可以不會因為擠太多番茄醬,讓我們製作漢堡的測試毀掉,可以專注於是否有放生菜、麵包等配料,擠番茄醬機器人就是一個Fake Object。

再舉一個例子,當我們想測試漢堡是否好吃,可以Fake一個假的烤箱,讓它固定會烤出最棒的漢堡,如果漢堡不好吃,就代表我們的配料不好,就可以重新選擇配料了! 不會因為烤箱的關係(可能溫度不夠,溫度過高等),而測試不準確。

總結

今天我們介紹了Stub陣營的夥伴們,他們其實都很像,只要能幫助我們做好測試,其實名字是不重要的XD

參考資料

https://yu-jack.github.io/2020/10/12/unit-test-best-practice-part-5/

https://medium.com/starbugs/unit-test-%E4%B8%AD%E7%9A%84%E6%9B%BF%E8%BA%AB-%E6%90%9E%E4%B8%8D%E6%B8%85%E6%A5%9A%E7%9A%84dummy-stub-spy-mock-fake-94be192d5c46

https://old-oomusou.goodjack.tw/jasmine/jasmine-test-double/


上一篇
[城鎮] 測試的替身,Test Double
下一篇
[城鎮] 五種Test Double - Mock、SPY
系列文
Kotlin魔法:Spring Boot 3的fp奇幻冒險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言