Heim > Backend-Entwicklung > Golang > Wie verspotte ich Strukturmethodenaufrufe in Go ohne Schnittstellen?

Wie verspotte ich Strukturmethodenaufrufe in Go ohne Schnittstellen?

DDD
Freigeben: 2024-12-13 13:13:09
Original
125 Leute haben es durchsucht

How to Mock Struct Method Calls in Go without Interfaces?

Verspotten von Strukturmethodenaufrufen in Go

In Go kann das Verspotten von Methodenaufrufen einer Struktur ohne Einführung von Schnittstellen durch eine Technik erreicht werden, die als bekannt ist das „doppelte“ Muster. So implementieren Sie es:

1. Erstellen Sie eine Performer-Schnittstelle:

Definieren Sie eine Schnittstelle, die die Methode kapselt, die Sie verspotten möchten.

type Performer interface {
    perform()
}
Nach dem Login kopieren

2. Implementieren Sie die Schnittstelle mit Mocks und realer Implementierung:

Erstellen Sie zwei Strukturen, eine für die reale Implementierung (A) und eine andere für das Mock (AMock), die beide die Performer-Schnittstelle implementieren.

type A struct{}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct{}

func (a *AMock) perform() {
    fmt.Println("mocked method")
}
Nach dem Login kopieren

3. Verwenden Sie die Abhängigkeitsinjektion:

Verwenden Sie in Ihrer invoke()-Funktion die Abhängigkeitsinjektion, um die Performer-Schnittstelle zu übergeben, anstatt direkt auf eine globale Variable zuzugreifen.

func invoke(p Performer) {
    p.perform()
}
Nach dem Login kopieren

4 . Injizieren Sie Mocks in Tests:

Fügen Sie in Ihren Testfällen die AMock-Instanz in die Funktion invoke() ein. Dadurch können Sie das Verhalten der simulierten Methode simulieren.

// Create a mock performer
m := &AMock{}

// Inject the mock into invoke
invoke(m)
Nach dem Login kopieren

5. Scheinaufrufe überprüfen (optional):

Wenn Sie eine Scheinbibliothek wie testify/mock verwenden, können Sie weiter überprüfen, ob die Scheinmethode mit den erwarteten Argumenten und der erwarteten Häufigkeit aufgerufen wurde.

// Assert that the mocked method was called
mock.AssertCalled(t, "perform", "argument1", "argument2")
Nach dem Login kopieren

Durch die Verwendung des Doppelmusters können Sie die Methodenaufrufe einer Struktur in Go effektiv nachahmen und so die Flexibilität und Isolation bieten, die für gründliche Tests erforderlich sind.

Das obige ist der detaillierte Inhalt vonWie verspotte ich Strukturmethodenaufrufe in Go ohne Schnittstellen?. 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