Maison >développement back-end >Golang >Comment simuler des appels de méthode Struct dans Go sans interfaces ?

Comment simuler des appels de méthode Struct dans Go sans interfaces ?

DDD
DDDoriginal
2024-12-13 13:13:09117parcourir

How to Mock Struct Method Calls in Go without Interfaces?

Se moquer des appels de méthode de structure dans Go

Dans Go, se moquer des appels de méthode d'une structure sans introduire d'interfaces peut être réalisé grâce à une technique connue sous le nom de le motif "double". Voici comment le mettre en œuvre :

1. Créez une interface Performer :

Définissez une interface qui encapsule la méthode que vous souhaitez moquer.

type Performer interface {
    perform()
}

2. Implémentez l'interface avec des simulations et une implémentation réelle :

Créez deux structures, une pour l'implémentation réelle (A) et une autre pour la simulation (AMock) qui implémentent toutes deux l'interface Performer.

type A struct{}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct{}

func (a *AMock) perform() {
    fmt.Println("mocked method")
}

3. Utilisez l'injection de dépendances :

Dans votre fonction Invocation(), utilisez l'injection de dépendances pour transmettre l'interface Performer, plutôt que d'accéder directement à une variable globale.

func invoke(p Performer) {
    p.perform()
}

4 . Injecter des simulations dans les tests :

Dans vos cas de test, injectez l'instance AMock dans la fonction Invocation(). Cela vous permettra de simuler le comportement de la méthode simulée.

// Create a mock performer
m := &AMock{}

// Inject the mock into invoke
invoke(m)

5. Vérifier les appels simulés (facultatif) :

Si vous utilisez une bibliothèque moqueuse comme testify/mock, vous pouvez vérifier en outre que la méthode simulée a été appelée avec les arguments et la fréquence attendus.

// Assert that the mocked method was called
mock.AssertCalled(t, "perform", "argument1", "argument2")

En utilisant le double modèle, vous pouvez efficacement simuler les appels de méthode d'une structure dans Go, offrant ainsi la flexibilité et l'isolation nécessaires pour des tests approfondis.

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