Heim > Backend-Entwicklung > Golang > Wie kann ich Funktionen in Go simulieren, um effektive Tests zu ermöglichen?

Wie kann ich Funktionen in Go simulieren, um effektive Tests zu ermöglichen?

Susan Sarandon
Freigeben: 2024-12-05 09:15:14
Original
641 Leute haben es durchsucht

How Can I Mock Functions in Go for Effective Testing?

So erstellen Sie verspottbare Funktionen in Go

In Go ist das Verspotten bestimmter Funktionen, die in konkreten Typen deklariert werden, nicht möglich. Allerdings stehen Ihnen mehrere Möglichkeiten zur Verfügung, um Testbarkeit zu erreichen:

Funktionswerte verspotten

Funktionswerte, die als Variablen, Strukturfelder oder Funktionsparameter vorliegen, können in Go verspottet werden. Bedenken Sie Folgendes:

var Fn = func() { ... }

type S struct {
    Fn func()
}

func F(Fn func())
Nach dem Login kopieren

In jedem dieser Fälle ist Fn verspottbar.

Nutzung von Schnittstellen

Schnittstellen stellen ein effektives und bevorzugtes Mittel zum Verspotten in Go dar. Betrachten Sie das folgende Beispiel:

type ProductRepository interface {
    GetProductById(DB *sql.DB, ID int) (p Product, err error)
}

// Real implementation
type ProductStore struct{}

func (ProductStore) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    q := "SELECT * FROM product WHERE id = ?"
    // ...
}

// Mock implementation
type ProductRepositoryMock struct {}

func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}
Nach dem Login kopieren

Code, der auf ProductRepository angewiesen ist, kann ProductStore für die normale Ausführung und ProductRepositoryMock für Testzwecke verwenden.

Funktionen über Schnittstellen anpassen

Um die meisten davon beizubehalten Um die ursprüngliche Struktur Ihrer Funktion zu erhalten und gleichzeitig Mocking zu aktivieren, erstellen Sie eine Schnittstelle, die die Methoden des Typs widerspiegelt, der an Ihre Funktionen übergeben werden soll. Implementieren Sie dann eine Scheinversion der Schnittstelle und verwenden Sie sie beim Testen.

type DBIface interface {
    Query(query string, args ...interface{}) (*sql.Rows, error)
    // ...
}

type DBMock struct {}

func (DBMock) Query(query string, args ...interface{}) (*sql.Rows, error) {
    // ...
}

func GetProductByName(DB DBIface, name string) (p Product, err error) {
   ...
}
Nach dem Login kopieren

Der DB-Parameter in GetProductByName ist jetzt verspottbar.

Das obige ist der detaillierte Inhalt vonWie kann ich Funktionen in Go simulieren, um effektive Tests zu ermöglichen?. 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