Verspottungsfunktionen in Golang
In Golang werden für konkrete Typen deklarierte Verspottungsfunktionen nicht direkt unterstützt. Es gibt jedoch mehrere Strategien, um eine ähnliche Funktionalität zu erreichen.
Funktionswerte
Funktionswerte, einschließlich Variablen, Strukturfelder oder Parameter, können verspottet werden. Bedenken Sie Folgendes:
var Fn = func() { ... } type S struct { Fn func() } func F(Fn func())
Fn ist in all diesen Fällen verspottbar.
Schnittstellen
Das Verspotten von Schnittstellen ist eine bevorzugte Option. Erstellen Sie eine Schnittstelle, die die Methoden Ihrer Zielfunktionen darstellt:
type ProductRepository interface { GetProductById(DB *sql.DB, ID int) (p Product, err error) }
Implementieren Sie eine echte und eine Scheinversion dieser Schnittstelle:
// Real implementation type ProductStore struct{} func (ProductStore) GetProductById(DB *sql.DB, ID int) (p Product, err error) { // ... } // Mock implementation type ProductRepositoryMock struct {} func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) { // ... }
Code, der von ProductRepository abhängt, kann jetzt übergeben werden die reale Implementierung für den Produktionsgebrauch und die Scheinimplementierung zum Testen.
Schnittstelle Nachahmen
Alternativ können Sie eine Schnittstelle definieren, die die Methoden von *sql.DB nachahmt, und dann diesen Schnittstellentyp als Parametertyp für Ihre Funktionen verwenden:
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) { // ... }
Dadurch wird die DB-Parameter verspottbar.
Das obige ist der detaillierte Inhalt vonWie kann ich Funktionen in Golang effektiv verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!