Maison >développement back-end >Golang >Comment puis-je simuler efficacement les fonctions dans Golang ?

Comment puis-je simuler efficacement les fonctions dans Golang ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-07 07:51:17579parcourir

How Can I Effectively Mock Functions in Golang?

Fonctions moqueuses dans Golang

Dans Golang, les fonctions moqueuses déclarées sur les types concrets ne sont pas directement prises en charge. Cependant, il existe plusieurs stratégies pour obtenir des fonctionnalités similaires.

Valeurs de fonction

Les valeurs de fonction, y compris les variables, les champs de structure ou les paramètres, peuvent être moquées. Considérez ce qui suit :

var Fn = func() { ... }

type S struct {
    Fn func()
}

func F(Fn func())

Fn dans tous ces cas est moqueable.

Interfaces

La moquerie des interfaces est une option privilégiée. Créez une interface qui représente les méthodes de vos fonctions cibles :

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

Implémentez une version réelle et fictive de cette interface :

// 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) {
    // ...
}

Le code qui dépend de ProductRepository peut désormais être transmis l'implémentation réelle pour une utilisation en production et l'implémentation fictive pour les tests.

Interface Imiter

Vous pouvez également définir une interface qui imite les méthodes de *sql.DB, puis utiliser ce type d'interface comme type de paramètre pour vos fonctions :

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) {
    // ...
}

Cela rend le Paramètre DB moquable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn