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

Wie kann ich Funktionen in Golang effektiv verspotten?

Linda Hamilton
Freigeben: 2024-12-07 07:51:17
Original
545 Leute haben es durchsucht

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

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

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

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

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!

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