Methodenaufrufe von Strukturen in Go-Testfällen verspotten
Problem:
Wie man verspottet ein Methodenaufruf einer Struktur in einem Go-Testfall, ohne Schnittstellen in der Quelle einzuführen Code?
Codebeispiel:
type A struct {} func (a *A) perfom(string){ ... ... .. } var s := A{} func invoke(url string){ out := s.perfom(url) ... ... }
Antwort:
Um einen Methodenaufruf einer Struktur zu verspotten, eins Der Ansatz besteht darin, ein Scheinobjekt zu verwenden.
Lösung mit Mock Objekt:
Beispielcode:
type Performer interface { perform() } type A struct {} func (a *A) perform() { fmt.Println("real method") } type AMock struct {} func (a *AMock) perform () { fmt.Println("mocked method") } func caller(p Performer) { p.perform() }
Injizieren Sie im Testfall die Scheinimplementierung in die Aufruffunktion:
func TestCallerMock(t *testing.T) { mock := &AMock{} caller(mock) }
Fügen Sie im echten Code die echte Implementierung in die Aufruffunktion ein:
func RealInvoke(url string) { a := &A{} out := a.perform(url) }
Das obige ist der detaillierte Inhalt vonWie verspotte ich Strukturmethodenaufrufe in Go-Tests ohne Schnittstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!