Heim > Backend-Entwicklung > Golang > Wie kann ich unveränderbaren Go-Code zum Testen nachahmen?

Wie kann ich unveränderbaren Go-Code zum Testen nachahmen?

DDD
Freigeben: 2024-12-09 17:31:17
Original
459 Leute haben es durchsucht

How Can I Mock Unmodifiable Go Code for Testing?

Golang Monkey Patching für nicht veränderbaren Code

In Go stellt das Fehlen von Änderungen an Laufzeitobjekten eine Herausforderung für das Testen von stark vernetztem Code dar, dem es an Abhängigkeiten mangelt Injektion oder Schnittstellenprogrammierung. Um diese Einschränkung zu umgehen, sollten Sie den folgenden Ansatz in Betracht ziehen:

Erstellen einer Mocking-Wrapper-Schnittstelle

Definieren Sie Ihre eigene Schnittstelle, die die ursprünglichen Strukturen umschließt. Zum Beispiel:

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}
Nach dem Login kopieren

Verwenden einer Adapterstruktur

Implementieren Sie die Wrapper-Schnittstelle in einer neuen Struktur, die die Implementierung der ursprünglichen Struktur anpasst:

type Concrete struct {
    client *somepackage.Client
}

func (c *Concrete) DoSomething(i int) error {
    return c.client.DoSomething(i)
}

func (c *Concrete) DoSomethingElse() ([]int, error) {
    return c.client.DoSomethingElse()
}
Nach dem Login kopieren

Testen mit dem Wrapper

Sie können jetzt verspotten die Concrete-Struktur in Unit-Tests, weil sie sich an eine Schnittstelle hält:

// Mock Concrete
mock := &MockMyInterface{}
c := Concrete{mock}

// Call mock method
err := c.DoSomething(10)
Nach dem Login kopieren

Einbetten des Originaltyps

Wie von @elithrar vorgeschlagen, können Sie auch das Original einbetten Geben Sie ein, um selektiv nur notwendige Methoden zu verspotten:

type Concrete struct {
    *somepackage.Client
}
Nach dem Login kopieren

In diesem Fall können Sie immer noch auf die ursprüngliche Implementierung von Methoden zugreifen, die dies nicht tun muss verspottet werden:

c := Concrete{&somepackage.Client{}}
c.DoSomethingNotNeedingMocking() // Calls the original implementation
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich unveränderbaren Go-Code zum Testen nachahmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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