在自動化測試的領域,有時候我們會希望測試時使用的元件跟專案實際上使用的元件不同
例如說,假設我們要測試商城的訂單功能,我們一定不會希望每次執行自動化測試時,都真的送出一張訂單
這就可以用前面說過的依賴注入,搭配上 mock 的方式,來進行自動化測試了
Ktor 已經提供了一個自己的依賴注入套件
可以參考依賴注入的文件 https://openaidoc.org/zh-Hant/ktor/server-dependency-injection
前面說過,依賴注入允許我們在調整程式邏輯時,透過切換新元件的方式轉換功能,而不是修改元件
在自動化測試時,這個功能更是重要。
我們可以將測試時,不是測試目標但是相關連的元件,在自動化測試時切換成一個假的元件。
這樣一來,我們在執行測試時,就可以只針對目標進行測試,而不會連相關元件故障都一起測出來。
比方說,假設我們在 Ktor 的 DI 內,設置了呼叫 GreetingService
時會拿到 GreetingServiceImpl
dependencies {
provide<GreetingService> { GreetingServiceImpl() }
}
在測試時,我們可以將 GreetingService
對應的實作改成 MockGreetingService
fun test() = testApplication {
application {
dependencies.provide<GreetingService> {
MockGreetingService()
}
loadServices()
}
}
這樣一來,我們就不會在這次測試時碰到 GreetingServiceImpl
的內容了。
今天的部分就到這邊,我們明天見!