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

Wie verspotte ich Strukturmethodenaufrufe in Go-Tests ohne Schnittstellen?

Susan Sarandon
Freigeben: 2024-12-09 18:57:26
Original
372 Leute haben es durchsucht

How to Mock Struct Method Calls in Go Tests Without Interfaces?

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

Antwort:

Um einen Methodenaufruf einer Struktur zu verspotten, eins Der Ansatz besteht darin, ein Scheinobjekt zu verwenden.

Lösung mit Mock Objekt:

  1. Erstellen Sie eine Performer-Schnittstelle, die die zu verspottende Methode definiert.
  2. Erstellen Sie eine echte Implementierung A der Performer-Schnittstelle.
  3. Erstellen Sie eine Scheinimplementierung AMock der Performer-Schnittstelle.
  4. Übergeben Sie die Scheinimplementierung an die Aufruffunktion im Test Fall.

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

Injizieren Sie im Testfall die Scheinimplementierung in die Aufruffunktion:

func TestCallerMock(t *testing.T) {
    mock := &AMock{}
    caller(mock)
}
Nach dem Login kopieren

Fügen Sie im echten Code die echte Implementierung in die Aufruffunktion ein:

func RealInvoke(url string) {
    a := &A{}
    out := a.perform(url)
}
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage