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

Comment se moquer des appels de méthode Struct dans les tests Go sans interfaces ?

Susan Sarandon
Libérer: 2024-12-09 18:57:26
original
485 Les gens l'ont consulté

How to Mock Struct Method Calls in Go Tests Without Interfaces?

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

type A struct {}

 

func (a *A) perfom(string){

...

...

..

}

 

var s := A{}

func invoke(url string){

   out := s.perfom(url)

   ...

   ...

}

Copier après la connexion

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 :

  1. Créer une interface Performer qui définit la méthode à moquer.
  2. Créer une véritable implémentation A de l'interface Performer.
  3. Créer un implémentation simulée AMock de l'interface Performer.
  4. Passez l'implémentation simulée à la fonction d'invocation dans le test cas.

Exemple de code :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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()

}

Copier après la connexion

Dans le scénario de test, injectez l'implémentation fictive dans la fonction d'invocation :

1

2

3

4

func TestCallerMock(t *testing.T) {

    mock := &AMock{}

    caller(mock)

}

Copier après la connexion

Dans le vrai code, injectez la véritable implémentation dans la fonction d'invocation :

1

2

3

4

func RealInvoke(url string) {

    a := &A{}

    out := a.perform(url)

}

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!

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