Abhängigkeitsinjektion beim Golang-Funktionstest

WBOY
Freigeben: 2024-04-12 16:33:01
Original
803 Leute haben es durchsucht

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.

Golang 函数测试中的依赖注入

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)
}
Nach dem Login kopieren

要测试 GetCustomer 方法,我们需要为它提供一个模拟的 CustomerRepository

使用 wire 实现

使用 wire,我们可以创建一个依赖注入器,如下所示:

func provideCustomerService(repo CustomerRepository) (*CustomerService, error) {
    return &CustomerService{
        repo: repo,
    }, nil
}
Nach dem Login kopieren

然后,在测试中,我们可以使用 wire 来注入模拟的 CustomerRepository

func TestGetCustomer(t *testing.T) {
    repo := &fakeCustomerRepository{} // 模拟的 CustomerRepository

    service, err := provideCustomerService(repo)
    if err != nil {
        t.Fatalf("provideCustomerService: %v", err)
    }

    // 测试 CustomerService 的 GetCustomer 方法
}
Nach dem Login kopieren
Um die 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!