Maison >développement back-end >Golang >Comment se moquer des méthodes Struct dans les cas de test Go sans interfaces ?

Comment se moquer des méthodes Struct dans les cas de test Go sans interfaces ?

DDD
DDDoriginal
2024-12-20 17:52:10645parcourir

How to Mock Struct Methods in Go Test Cases Without Interfaces?

Méthodes de structure moqueuses dans les cas de test Go

Dans Go, les appels de méthode moqueuse d'une structure peuvent être réalisés sans introduire d'interfaces dans le code source . Voici comment procéder :

Se moquer d'un exemple de structure et d'une méthode

Considérez la structure et la méthode suivantes :

type A struct {}

func (a *A) perfom(string){
...
...
..
}

Se moquer des cas de test

Pour se moquer de la méthode perform pour le test cases :

  1. Créer une interface simulée : Définir une interface qui représente la méthode à simuler.
type Performer interface {
    perform(string)
}
  1. Créer des implémentations simulées et réelles : Implémenter l'interface pour une implémentation simulée et réelle du struct.
type AMock struct {}

func (a *AMock) perform(string) {
    // Mocked behavior
}

type A struct {}

func (a *A) perform(string) {
    // Real implementation
}
  1. Utiliser l'injection de dépendances : Transmettez l'implémentation simulée ou réelle comme argument à la fonction testée.
func invoke(url string, p Performer) {
    out := p.perfom(url)
    ...
    ...
}
  1. Injecter Mock dans les tests : Dans vos cas de test, injectez l'implémentation simulée dans le Invoquer la fonction.
func TestInvokeWithMock(t *testing.T) {
    var amok = &AMock{}
    invoke("url", amok)
    // Verify mock behavior (e.g., assert it was called with the correct argument)
}
  1. Injecter une implémentation réelle dans le code de production : Dans votre code de production, injectez l'implémentation réelle de la structure dans la fonction d'invocation.
func TestInvokeWithReal(t *testing.T) {
    var a = &A{}
    invoke("url", a)
    // No need for verification since it's the real implementation
}

Autres options

Bibliothèques comme [testify/mock](https://godoc.org/github.com/stretchr/testify/mock) offrent des capacités de simulation encore plus robustes, vous permettant de contrôler le comportement simulé et de vérifier les appels de méthode.

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