我們昨天介紹了Test Double的概念,今天要來更進一步地介紹Dummy、Fake、Stubs ,他們之間的差別。
Test Double可以分為兩大陣營,Mock與Stub
Mock是用來驗證並模擬互動結果的工具。
Mock、Spy屬於這邊
Stubs則是模擬數值或是回傳數值的工具。
Stub、Dummy、Fake屬於這邊
通常是指做虛擬的、空的、或者是用於填充的物件,為了滿足某些需求而存在。比如說我們要測試一個物件,而這個物件需要傳入一些物件當作參數才能建構時,我們就需要塞入假的資料,讓他可以正常的建構起來,而這些物件可能在我們的這個測試情境完全不會用到,只是為了要滿足建構條件,這就叫做Dummy Object。
以測試製作漢堡來說! 我們需要將兩塊麵包之間塞入菜、肉等配料才叫做漢堡,我們如果只想測試漢堡是否有兩塊麵包,那麼中間塞的那些料就是Dummy Object了,我們不在意塞了甚麼東西,只在意有做出漢堡這件事情。
Stub跟Dummy很像,就是做虛擬的、空的、或者是用於填充的物件,但它實際會被用到!要測試是否有拿到假的資料。
再拿製作漢堡做例子,今天我們想測試我們做的漢堡是否有麵包而且還有生菜,我們這時候就把生菜先固定起來Stub! 然後專心看我們有沒有放麵包,這樣是否有放生菜就不影響我們的測試,因為Stub已經幫我們放生菜了,我們就可以專心看有沒有放麵包這件事情。
當然我們也要驗證最後的漢堡是否有麵包和生菜,不然Stub就沒用啦XD
它很像是一個輕量化的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://old-oomusou.goodjack.tw/jasmine/jasmine-test-double/