Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara membuat ujian unit dengan suntikan kebergantungan menggunakan Golang

Cara membuat ujian unit dengan suntikan kebergantungan menggunakan Golang

PHPz
PHPzke hadapan
2024-02-11 15:42:08348semak imbas

如何使用 Golang 创建单元测试依赖注入

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!

Kandungan soalan

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)

Penyelesaian

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 不应创建任何依赖项,因此您应该将其应用于 userProduceruserUseCase 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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam