Maison >développement back-end >Golang >Techniques de moquerie dans les tests unitaires de fonctions Go
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.
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.
Les principes de base du mocking sont :
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 库进行模拟。首先,我们定义要模拟的接口:
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 simulationVous 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 : 🎜rrreeeCe 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!