Maison >développement back-end >Golang >Comment puis-je simuler efficacement les fonctions dans 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!