Maison > Article > développement back-end > Comment créer des tests unitaires avec injection de dépendances à l'aide de Golang
l'éditeur php Youzi vous propose un article sur la façon d'utiliser Golang pour créer une injection de dépendances de tests unitaires. Dans le développement de logiciels, les tests unitaires sont un élément crucial et l'injection de dépendances est un modèle de conception couramment utilisé qui peut nous aider à mieux effectuer les tests unitaires. Cet article présentera brièvement comment utiliser Golang pour implémenter l'injection de dépendances afin que nous puissions écrire du code testable plus facilement. Explorons ensemble !
Par exemple, je souhaite créer une API utilisateur Avec une structure d'injection de dépendances comme celle-ci
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() }
Ensuite, je souhaite créer un test unitaire pour l'API de création d'utilisateurs, mais je ne veux pas réellement interagir ou simuler avec la base de données. Étant donné que userUseCase nécessite un référentiel, cela signifie que nous allons créer un userRepository fictif pour la fonction SaveUserToDB.
Est-ce la bonne méthode à utiliser ?
mockRepo.On("SaveUserToDB", mock.Anything, mock.AnythingOfType("*repository.User")).Return(nil)
L'injection de dépendances nécessite d'injecter réellement les dépendances. Bootstrap
正在创建其依赖项,因此可以说这不是依赖项注入。如果你在测试中使用了 Bootstrap
, alors ce n'est certainement pas une injection de dépendance.
Il faut donc func Bootstrap(config *BootstrapConfig)
至少更改为 func Bootstrap(config *BootstrapConfig, userRepository *repository.User)
.
Ensuite, lors de votre test, vous le ferez 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
Attends
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!