iT邦幫忙

2023 iThome 鐵人賽

DAY 18
1
Kotlin

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

[城鎮] It is rule - Contract Test

  • 分享至 

  • xImage
  •  

前情提要

昨天講了Mutaion test是什麼碗糕,今天我們要再講一種測試方式,Contract test

Contract test是什麼?

開發者會將一個大系統拆解成各種微服務來實作,就像是我們的Service層,有各種的Service,而拆解後我們必須確保這些服務能夠由特定的介面來通訊。

就如同字面上的意思,它有提供者(Provider)與消費者(Consumer),就跟我們買東西一樣,假設我們簽約花100元買一批新鮮的雞蛋,提供者必須提供100元價值的新鮮雞蛋,如果提供了壞掉的臭雞蛋就是破壞合約!
而消費者方呢? 也要遵守合約,比如說3天內取貨,或是即時的付款購買這批雞蛋。
這樣的合約對雙方都能有保障,而在程式中的合約是什麼呢?

程式中的合約

以我們的Spring Boot app中,Provider可以是Api,而Consumer則是Call我們這隻Api的Ui,又或者是其他的app,這樣兩方只要對這個合約走,就比較不會有出錯的機會

我覺得就像是依賴反轉原則一樣,我們都依賴於一個interface,就可以解耦,只要符合合約就可以確保我們程式運作的邏輯是正常的。
https://ithelp.ithome.com.tw/upload/images/20231003/20129702wlE1koeQPD.png
圖片來源
https://docs.pact.io/img/how-pact-works/summary.png

Consumer跟Provider透過Contract進行解耦,原本要兩者一起整合測試,大家還記得嗎,整合測試是比較花時間的!現在我們就可以切開,兩者分別進行unit test就可以了,因為滿足合約,就表示我們整合測試也會通過。

總結

今天我們又介紹了一種測試的方式,透過合約,我們可以比較有信心的更改我們的程式碼,不用擔心會影響到其他人,因為照著合約走就對了XD

參考資料

https://www.cythilya.tw/2021/06/10/pact/
https://www.testwo.com/blog/16396


上一篇
[城鎮] 看我的百變怪 - Mutation Test
下一篇
[城鎮] TestContainer 衝衝衝
系列文
Kotlin魔法:Spring Boot 3的fp奇幻冒險30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Summer
iT邦新手 3 級 ‧ 2024-01-11 10:25:52

感謝推薦我的文章!

我要留言

立即登入留言