Cara membuat ujian unit dengan suntikan kebergantungan menggunakan Golang

PHPz
Lepaskan: 2024-02-11 15:42:08
ke hadapan
367 orang telah melayarinya

如何使用 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()
}
Salin selepas log masuk

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)
Salin selepas log masuk

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)
    …
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!