Maison >développement back-end >Golang >Techniques de moquerie dans les tests unitaires de fonctions Go

Techniques de moquerie dans les tests unitaires de fonctions Go

WBOY
WBOYoriginal
2024-04-30 18:21:01664parcourir

La moquerie dans les tests unitaires est la technique consistant à créer des doubles de tests dans les tests unitaires pour remplacer les dépendances externes, permettant d'isoler et de tester des fonctions spécifiques. Les principes de base sont : définir l’interface, créer un mock, injecter un mock. Pour utiliser le mocking GoogleMock, vous devez définir l'interface, créer le mock et l'injecter dans la fonction de test. Pour utiliser la simulation testify/mock, vous devez déclarer la structure MockClient, définir la valeur attendue pour la méthode Get et définir la simulation dans la fonction de test.

Go 函数单元测试中的模拟技巧

Techniques de moquerie dans les tests unitaires de la fonction Go

Dans les tests unitaires, la moquerie est une technique permettant de créer des doubles de test pour remplacer les dépendances externes dans le code testé. Cela vous permet d'isoler et de tester des fonctions spécifiques sans interagir avec d'autres composants.

Principes de base du mocking

Les principes de base du mocking sont :

  1. Définir l'interface : Créer une interface qui représente le composant à moquer.
  2. Créer une maquette : Créez une implémentation simulée de cette interface qui définit les appels attendus et les valeurs renvoyées.
  3. Injecter des mocks : Dans les fonctions de test, remplacez les dépendances réelles par des mocks.

Cas pratique

Considérons la fonction suivante en utilisant le package net/http : net/http 包的函数:

func GetPage(url string) (*http.Response, error) {
    client := http.Client{}
    return client.Get(url)
}

要测试此函数,我们需要模拟 http.Client,因为它是一个外部依赖项。

使用 GoogleMock 进行模拟

可以使用 GoogleMock 库进行模拟。首先,我们定义要模拟的接口:

type MockClient interface {
    Get(url string) (*http.Response, error)
}

然后,我们可以使用 new(MockClient)

import (
    "testing"

    "github.com/golang/mock/gomock"
)

func TestGetPage(t *testing.T) {
    ctrl := gomock.NewController(t)
    defer ctrl.Finish()

    client := mock.NewMockClient(ctrl)
    client.EXPECT().Get("http://example.com").Return(&http.Response{}, nil)

    resp, err := GetPage("http://example.com")
    assert.NoError(t, err)
    assert.NotNil(t, resp)
}

Pour tester cette fonction, nous devons nous moquer de http.Client puisqu'il s'agit d'un Dépendances externes.

Utilisez GoogleMock pour la simulation

Vous pouvez utiliser la bibliothèque GoogleMock pour la simulation. Tout d'abord, nous définissons l'interface à moquer : 🎜
import (
    "testing"

    "github.com/stretchr/testify/mock"
)

type MockClient struct {
    mock.Mock
}

func (m *MockClient) Get(url string) (*http.Response, error) {
    args := m.Called(url)
    return args.Get(0).(*http.Response), args.Error(1)
}

func TestGetPage(t *testing.T) {
    client := new(MockClient)
    client.On("Get", "http://example.com").Return(&http.Response{}, nil)

    resp, err := GetPage("http://example.com")
    assert.NoError(t, err)
    assert.NotNil(t, resp)
}
🎜 Ensuite, nous pouvons créer le mock en utilisant new(MockClient) et l'injecter dans la fonction de test : 🎜rrreee🎜Mock en utilisant testify/mock🎜🎜 Le La bibliothèque testify/mock fournit également une fonctionnalité de moquerie. Les exemples d'utilisation sont les suivants : 🎜rrreee

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