Heim > Backend-Entwicklung > Golang > Wie verspotte ich Strukturmethoden in Go-Testfällen ohne Schnittstellen?

Wie verspotte ich Strukturmethoden in Go-Testfällen ohne Schnittstellen?

DDD
Freigeben: 2024-12-20 17:52:10
Original
641 Leute haben es durchsucht

How to Mock Struct Methods in Go Test Cases Without Interfaces?

Strukturmethoden in Go-Testfällen verspotten

In Go können Methodenaufrufe einer Struktur verspottet werden, ohne Schnittstellen in den Quellcode einzuführen . So geht's:

Verspotten einer Beispielstruktur und -methode

Betrachten Sie die folgende Struktur und Methode:

type A struct {}

func (a *A) perfom(string){
...
...
..
}
Nach dem Login kopieren

Verspotten in Testfällen

Um die Perform-Methode für Tests zu verspotten Fälle:

  1. Erstellen Sie eine Mock-Schnittstelle: Definieren Sie eine Schnittstelle, die die zu verspottende Methode darstellt.
type Performer interface {
    perform(string)
}
Nach dem Login kopieren
  1. Erstellen Sie Schein- und echte Implementierungen: Implementieren Sie die Schnittstelle sowohl für eine Schein- als auch für eine echte Implementierung des struct.
type AMock struct {}

func (a *AMock) perform(string) {
    // Mocked behavior
}

type A struct {}

func (a *A) perform(string) {
    // Real implementation
}
Nach dem Login kopieren
  1. Abhängigkeitsinjektion verwenden: Übergeben Sie die simulierte oder reale Implementierung als Argument an die zu testende Funktion.
func invoke(url string, p Performer) {
    out := p.perfom(url)
    ...
    ...
}
Nach dem Login kopieren
  1. Injizieren Sie Mock in Tests:Injizieren Sie in Ihren Testfällen den Mock Implementierung in die Aufruffunktion.
func TestInvokeWithMock(t *testing.T) {
    var amok = &AMock{}
    invoke("url", amok)
    // Verify mock behavior (e.g., assert it was called with the correct argument)
}
Nach dem Login kopieren
  1. Injizieren Sie eine echte Implementierung in den Produktionscode: Fügen Sie in Ihrem Produktionscode die echte Implementierung der Struktur in die Aufruffunktion ein .
func TestInvokeWithReal(t *testing.T) {
    var a = &A{}
    invoke("url", a)
    // No need for verification since it's the real implementation
}
Nach dem Login kopieren

Andere Optionen

Bibliotheken wie [testify/mock](https://godoc.org/github.com/stretchr/testify/mock) bieten noch robustere Mocking-Funktionen, mit denen Sie das Mock-Verhalten steuern können Methodenaufrufe überprüfen.

Das obige ist der detaillierte Inhalt vonWie verspotte ich Strukturmethoden in Go-Testfällen 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