昨天講了Mutaion test是什麼碗糕,今天我們要再講一種測試方式,Contract test
開發者會將一個大系統拆解成各種微服務來實作,就像是我們的Service層,有各種的Service,而拆解後我們必須確保這些服務能夠由特定的介面來通訊。
就如同字面上的意思,它有提供者(Provider)與消費者(Consumer),就跟我們買東西一樣,假設我們簽約花100元買一批新鮮的雞蛋,提供者必須提供100元價值的新鮮雞蛋,如果提供了壞掉的臭雞蛋就是破壞合約!
而消費者方呢? 也要遵守合約,比如說3天內取貨,或是即時的付款購買這批雞蛋。
這樣的合約對雙方都能有保障,而在程式中的合約是什麼呢?
以我們的Spring Boot app中,Provider可以是Api,而Consumer則是Call我們這隻Api的Ui,又或者是其他的app,這樣兩方只要對這個合約走,就比較不會有出錯的機會
我覺得就像是依賴反轉原則一樣,我們都依賴於一個interface,就可以解耦,只要符合合約就可以確保我們程式運作的邏輯是正常的。
圖片來源
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