L'injection de dépendances peut être implémentée dans Go via des bibliothèques tierces. Il est recommandé d'utiliser la bibliothèque wire. Le mode d'injection de dépendances permet l'injection dynamique de dépendances, le découplage du code de test et du code de production et l'amélioration de la maintenabilité et de l'évolutivité des tests. Wire fournit un injecteur de dépendances qui peut injecter des dépendances fictives. Par exemple, dans l'exemple, la méthode GetCustomer de CustomerService est testée en injectant un CustomerRepository fictif, améliorant ainsi la qualité des tests.
Injection de dépendances pour les tests de fonctions dans Go
Introduction
Dans les tests unitaires, il est souvent nécessaire de fournir des dépendances pour la fonction testée. L'approche traditionnelle consiste à transmettre les dépendances directement en tant que paramètres dans la fonction testée. Cependant, cette approche couplera étroitement le test au code testé, ce qui rendra difficile sa maintenance et son extension.
Dependency Injection
Dependency Injection est un modèle de conception qui permet d'injecter dynamiquement des dépendances dans le constructeur ou la méthode d'un objet au moment de l'exécution. L'utilisation de l'injection de dépendances peut découpler le code de test et le code de production, améliorant ainsi la maintenabilité et l'évolutivité des tests.
Injection de dépendances dans Go
Il n'y a pas de cadre d'injection de dépendances intégré dans Go, mais cela peut être réalisé à l'aide de bibliothèques tierces. Il est recommandé d'utiliser la bibliothèque [wire](https://github.com/google/wire), qui est une bibliothèque légère d'injection de dépendances développée par Google.
Cas pratique
Supposons que nous ayons un CustomerService
, qui dépend d'un CustomerRepository
: CustomerService
,它依赖于一个 CustomerRepository
:
type CustomerService struct { repo CustomerRepository } func (s *CustomerService) GetCustomer(id int) (*Customer, error) { return s.repo.Get(id) }
要测试 GetCustomer
方法,我们需要为它提供一个模拟的 CustomerRepository
。
使用 wire 实现
使用 wire,我们可以创建一个依赖注入器,如下所示:
func provideCustomerService(repo CustomerRepository) (*CustomerService, error) { return &CustomerService{ repo: repo, }, nil }
然后,在测试中,我们可以使用 wire 来注入模拟的 CustomerRepository
func TestGetCustomer(t *testing.T) { repo := &fakeCustomerRepository{} // 模拟的 CustomerRepository service, err := provideCustomerService(repo) if err != nil { t.Fatalf("provideCustomerService: %v", err) } // 测试 CustomerService 的 GetCustomer 方法 }
GetCustomer
, nous Il doit être fourni avec un faux CustomerRepository
. 🎜Implémenté en utilisant wire🎜🎜🎜En utilisant wire, nous pouvons créer un injecteur de dépendances comme celui-ci : 🎜rrreee🎜 Ensuite, dans le test, nous pouvons utiliser wire pour injecter le CustomerRepository
simulé : 🎜rrreee🎜 En utilisant l'injection de dépendances, nous pouvons fournir des dépendances fictives pour le test sans modifier le code testé, améliorant ainsi la maintenabilité et l'évolutivité du test. 🎜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!