Maison > développement back-end > Golang > Comment puis-je me moquer du code Go non modifiable à des fins de test ?

Comment puis-je me moquer du code Go non modifiable à des fins de test ?

DDD
Libérer: 2024-12-09 17:31:17
original
460 Les gens l'ont consulté

How Can I Mock Unmodifiable Go Code for Testing?

Patching Golang Monkey pour le code non modifiable

Dans Go, l'absence de modification des objets d'exécution pose un défi pour tester du code fortement interconnecté et manquant de dépendance programmation d'injection ou d'interface. Pour contourner cette limitation, envisagez d'utiliser l'approche suivante :

Création d'une interface Wrapper moqueuse

Définissez votre propre interface qui encapsule les structures d'origine. Par exemple :

type MyInterface interface {
    DoSomething(i int) error
    DoSomethingElse() ([]int, error)
}
Copier après la connexion

Utilisation d'une structure d'adaptateur

Implémentez l'interface wrapper dans une nouvelle structure qui adapte l'implémentation de la structure d'origine :

type Concrete struct {
    client *somepackage.Client
}

func (c *Concrete) DoSomething(i int) error {
    return c.client.DoSomething(i)
}

func (c *Concrete) DoSomethingElse() ([]int, error) {
    return c.client.DoSomethingElse()
}
Copier après la connexion

Test avec le Wrapper

Vous pouvez moquez-vous maintenant de la structure Concrete dans les tests unitaires car elle adhère à une interface :

// Mock Concrete
mock := &MockMyInterface{}
c := Concrete{mock}

// Call mock method
err := c.DoSomething(10)
Copier après la connexion

Intégrer le type d'origine

Comme suggéré par @elithrar, vous pouvez également intégrer le type d'origine pour se moquer sélectivement uniquement des méthodes nécessaires :

type Concrete struct {
    *somepackage.Client
}
Copier après la connexion

Dans ce cas, vous pouvez toujours accéder à l'implémentation d'origine des méthodes qui pas besoin de se moquer :

c := Concrete{&somepackage.Client{}}
c.DoSomethingNotNeedingMocking() // Calls the original implementation
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal