editor php Youzi membawakan anda artikel tentang cara menggunakan Golang untuk membuat suntikan kebergantungan ujian unit. Dalam pembangunan perisian, ujian unit adalah bahagian yang penting, dan suntikan kebergantungan ialah corak reka bentuk yang biasa digunakan yang boleh membantu kami melaksanakan ujian unit dengan lebih baik. Artikel ini akan memperkenalkan secara ringkas cara menggunakan Golang untuk melaksanakan suntikan kebergantungan supaya kami boleh menulis kod yang boleh diuji dengan lebih mudah. Mari kita meneroka bersama-sama!
Sebagai contoh, saya ingin mencipta API pengguna Dengan struktur suntikan kebergantungan seperti ini
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() }
Kemudian, saya ingin membuat ujian unit untuk API penciptaan pengguna, tetapi saya tidak mahu sebenarnya berinteraksi atau mensimulasikan dengan pangkalan data. Memandangkan userUseCase memerlukan repositori, ini bermakna kami akan membuat olok-olok userRepository untuk fungsi SaveUserToDB.
Adakah ini kaedah yang betul untuk digunakan?
mockRepo.On("SaveUserToDB", mock.Anything, mock.AnythingOfType("*repository.User")).Return(nil)
Suntikan kebergantungan memerlukan sebenarnya menyuntik kebergantungan. Bootstrap
正在创建其依赖项,因此可以说这不是依赖项注入。如果你在测试中使用了 Bootstrap
, maka ini pastinya bukan suntikan kebergantungan.
Jadi anda perlu func Bootstrap(config *BootstrapConfig)
至少更改为 func Bootstrap(config *BootstrapConfig, userRepository *repository.User)
.
Kemudian, dalam ujian anda, anda akan 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
Tunggu
Atas ialah kandungan terperinci Cara membuat ujian unit dengan suntikan kebergantungan menggunakan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!