php小編柚子為您帶來了一篇關於如何使用Golang建立單元測試依賴注入的文章。在軟體開發中,單元測試是至關重要的一部分,而依賴注入則是常用的設計模式,可以幫助我們更好地進行單元測試。本文將簡潔地介紹如何使用Golang來實現依賴注入,以便我們能夠更輕鬆地編寫可測試的程式碼。讓我們一起來探索吧!
例如,我想建立一個使用者API 具有這樣的依賴注入結構
func Bootstrap(config *BootstrapConfig) { // setup repositories userRepository := repository.NewUserRepository(config.Log) // setup producer userProducer := messaging.NewUserProducer(config.Producer, config.Log) // setup use cases userUseCase := usecase.NewUserUseCase(config.DB, config.Log, config.Validate, userRepository, userProducer) // setup controller userController := http.NewUserController(userUseCase, config.Log) routeConfig := route.RouteConfig{ App: config.App, UserController: userController, } routeConfig.Setup() }
然後,我想為使用者建立 API 建立一個單元測試,但我不想與資料庫進行真正的互動或模擬。由於 userUseCase 需要一個儲存庫,這表示我們將為 SaveUserToDB 函數建立一個模擬 userRepository。
使用這樣的方法正確嗎?
mockRepo.On("SaveUserToDB", mock.Anything, mock.AnythingOfType("*repository.User")).Return(nil)
依賴項注入需要實際注入相依性。 Bootstrap
正在建立其依賴項,因此可以說這不是依賴項注入。如果你在測試中使用了 Bootstrap
,那麼這絕對不是依賴注入。
所以你需要將 func Bootstrap(config *BootstrapConfig)
至少改為 func Bootstrap(config *BootstrapConfig, userRepository *repository.User)
。
然後,在您的測試中,您將 mockRepo
傳遞給 Bootstrap
。
func Bootstrap(config *BootstrapConfig, userRepository *repository.User) { // setup producer userProducer := messaging.NewUserProducer(config.Producer, config.Log) // setup use cases userUseCase := usecase.NewUserUseCase(config.DB, config.Log, config.Validate, userRepository, userProducer) // setup controller userController := http.NewUserController(userUseCase, config.Log) routeConfig := route.RouteConfig{ App: config.App, UserController: userController, } routeConfig.Setup() } func TestFoo(t *testing.T) { mockRepo := mocks.NewUserRepository(config.Log) Bootstrap(config, mockRepo) mockRepo.On("SaveUserToDB", mock.Anything).Return(nil) … }
Bootstrap
不應建立任何依賴項,因此您應該將其套用至 userProducer
、userUseCase
等
以上是如何使用 Golang 建立單元測試依賴注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!