Abhängigkeitsinjektion kann in Go über Bibliotheken von Drittanbietern implementiert werden. Es wird empfohlen, die Wire-Bibliothek zu verwenden. Der Abhängigkeitsinjektionsmodus ermöglicht die dynamische Injektion von Abhängigkeiten, entkoppelt Test- und Produktionscode und verbessert die Wartbarkeit und Skalierbarkeit von Tests. Wire bietet einen Abhängigkeitsinjektor, der Scheinabhängigkeiten einschleusen kann. Im Beispiel wird beispielsweise die GetCustomer-Methode von CustomerService durch Einfügung eines Schein-CustomerRepository getestet, wodurch die Testqualität verbessert wird.
Funktionstest-Abhängigkeitsinjektion in Go
Einführung
Bei Unit-Tests ist es oft notwendig, Abhängigkeiten für die zu testende Funktion bereitzustellen. Der traditionelle Ansatz besteht darin, Abhängigkeiten direkt als Parameter in der zu testenden Funktion zu übergeben. Allerdings wird dieser Ansatz den Test eng mit dem zu testenden Code verknüpfen, was die Wartung und Erweiterung erschwert.
Abhängigkeitsinjektion
Abhängigkeitsinjektion ist ein Entwurfsmuster, das es ermöglicht, Abhängigkeiten zur Laufzeit dynamisch in den Konstruktor oder die Methode eines Objekts einzufügen. Mithilfe der Abhängigkeitsinjektion kann Test- und Produktionscode entkoppelt werden, wodurch die Wartbarkeit und Skalierbarkeit von Tests verbessert wird.
Abhängigkeitsinjektion in Go
In Go gibt es kein integriertes Abhängigkeitsinjektions-Framework, dies kann jedoch mithilfe von Bibliotheken von Drittanbietern erreicht werden. Es wird empfohlen, die Bibliothek [wire](https://github.com/google/wire) zu verwenden, eine von Google entwickelte, schlanke Abhängigkeitsinjektionsbibliothek.
Praktischer Fall
Angenommen, wir haben einen CustomerService
, der von einem CustomerRepository
abhängt: 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
-Methode zu testen, Wir müssen mit einem simulierten CustomerRepository
versehen werden. 🎜Implementiert mit Wire🎜🎜🎜Mit Wire können wir einen Abhängigkeitsinjektor wie folgt erstellen: 🎜rrreee🎜 Dann können wir im Test Wire verwenden, um das simulierte CustomerRepository
zu injizieren: 🎜rrreee🎜 Mithilfe der Abhängigkeitsinjektion können wir Scheinabhängigkeiten für den Test bereitstellen, ohne den zu testenden Code zu ändern, und so die Wartbarkeit und Skalierbarkeit des Tests verbessern. 🎜Das obige ist der detaillierte Inhalt vonAbhängigkeitsinjektion beim Golang-Funktionstest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!