Heim >Backend-Entwicklung >Golang >Wie kann ich Funktionen in Golang effektiv verspotten?

Wie kann ich Funktionen in Golang effektiv verspotten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-07 07:51:17575Durchsuche

How Can I Effectively Mock Functions in Golang?

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!

Stellungnahme:
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