Maison > développement back-end > Golang > Comment puis-je simuler efficacement des fonctions dans Go pour les tests unitaires ?

Comment puis-je simuler efficacement des fonctions dans Go pour les tests unitaires ?

Barbara Streisand
Libérer: 2024-12-27 22:06:14
original
425 Les gens l'ont consulté

How Can I Effectively Mock Functions in Go for Unit Testing?

Comment se moquer des fonctions dans Golang

Problème :

Dans une application Go, il existe des fonctions getter définies dans des fichiers séparés pour différents services. Chaque fonction prend une connexion à la base de données et des paramètres SQL en entrée et renvoie des données structurées ou une erreur. Le problème survient lorsque l'on tente de se moquer de ces fonctions à partir du package principal.

Solution :

Méthode 1 : se moquer des valeurs de fonction

Dans Go, il n'est pas possible de se moquer directement des fonctions. Cependant, vous pouvez simuler les valeurs de fonction, qui incluent des variables, des champs sur des structures et des paramètres de fonction. Pour ce faire, définissez la fonction comme variable ou transmettez-la comme paramètre à une autre fonction.

Méthode 2 : Utiliser les interfaces

Une approche privilégiée consiste à simuler les interfaces . Définissez une interface qui représente la fonctionnalité des fonctions getter et implémentez une version réelle et fictive de cette interface. Cela vous permet d'injecter l'implémentation fictive pendant les tests.

Méthode 3 : simulation de connexion à la base de données

Si les fonctions getter dépendent d'une connexion à la base de données, vous pouvez simuler la base de données type de connexion à la place. Définissez une interface qui imite les méthodes de connexion réelle à la base de données et implémentez une version fictive. Cela vous permet de transmettre la connexion fictive aux fonctions getter pendant les tests.

Exemple :

type ProductRepository interface {
    GetProductById(db DBIface, ID int) (p Product, err error)
}

type ProductStore struct{}

func (ProductStore) GetProductById(db DBIface, ID int) (p Product, err error) {
    // Your original implementation
}

type ProductRepositoryMock struct{}

func (ProductRepositoryMock) GetProductById(DB DBIface, ID int) (p Product, err error) {
    // Mock implementation
}
Copier après la connexion

Dans cet exemple, l'interface ProductRepository définit la fonction GetProductById. La structure ProductStore implémente l'interface en utilisant une véritable connexion à la base de données. La structure ProductRepositoryMock fournit une implémentation simulée pour les tests.

En utilisant des interfaces ou des valeurs de fonction fictives, vous pouvez réaliser une simulation dans Go sans modifier les déclarations de fonction d'origine, ce qui facilite les tests et l'isolation.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal