Maison >développement back-end >Golang >Comment simuler des appels de méthode Struct dans Go sans 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!