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() }
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") }
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() }
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)
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")
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!