Appels de méthode moqueuse de structures dans les cas de test Go
Problème :
Comment se moquer un appel de méthode d'une structure dans un scénario de test Go sans introduire d'interfaces dans la source code ?
Exemple de code :
type A struct {} func (a *A) perfom(string){ ... ... .. } var s := A{} func invoke(url string){ out := s.perfom(url) ... ... }
Réponse :
Pour se moquer d'un appel de méthode d'une structure, un L'approche consiste à utiliser un objet fictif.
Solution avec Mock Objet :
Exemple de code :
type Performer interface { perform() } type A struct {} func (a *A) perform() { fmt.Println("real method") } type AMock struct {} func (a *AMock) perform () { fmt.Println("mocked method") } func caller(p Performer) { p.perform() }
Dans le scénario de test, injectez l'implémentation fictive dans la fonction d'invocation :
func TestCallerMock(t *testing.T) { mock := &AMock{} caller(mock) }
Dans le vrai code, injectez la véritable implémentation dans la fonction d'invocation :
func RealInvoke(url string) { a := &A{} out := a.perform(url) }
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!