Maison  >  Article  >  développement back-end  >  Mocks et stubs dans les tests de fonction Golang

Mocks et stubs dans les tests de fonction Golang

WBOY
WBOYoriginal
2024-04-16 18:54:01344parcourir

Mocks et Stubs permettent l'isolement et la vérification des dépendances externes dans les tests de fonction Go. Les simulations simulent le comportement des dépendances, tandis que les Stubs fournissent des valeurs fixes. Pour utiliser des simulations, vous devez utiliser mockgen pour générer des fichiers simulés, introduire des simulations dans les tests et définir des attentes fictives. Pour utiliser Stubs, vous devez introduire le package stub, créer le stub et vérifier si le stub est appelé. En utilisant des Mocks et des Stubs, nous pouvons améliorer la robustesse et la confiance des tests fonctionnels.

Golang 函数测试中的 mocks 和 stubs

Comment utiliser les Mocks et les Stubs dans les tests de fonction Go

Les Mocks et les Stubs sont des techniques efficaces pour isoler et valider les dépendances externes lors des tests de fonction dans Go. Ci-dessous, nous explorerons comment utiliser ces techniques lors des tests.

Que sont les Mocks et les Stubs ?

Mock remplace les dépendances externes moqueuses, vous permettant de spécifier leur comportement et leurs caractéristiques dans vos tests. En revanche, un stub est un remplacement qui fournit des valeurs fixes sans simuler le comportement des dépendances.

Utilisez Mocks :

Utilisez mockgen pour générer des fichiers mock : mockgen 生成 mock 文件:

go get github.com/golang/mock/mockgen
mockgen -package=api -destination=mocks/customer_mock.go github.com/your-org/your-repo/api CustomerService

在测试函数中引入 Mock:

import mocks "github.com/your-org/your-repo/api/mocks"

func TestFunctionWithCustomerService(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}
}

设置 Mock 期望值:

// 设置客户创建方法的预期行为
mockCustomerService.On("CreateCustomer", mock.Anything).Return(nil, nil)

使用 Stubs:

引入 Stub 包:

import "github.com/stretchr/testify/stub"

在测试函数中创建 Stub:

// 创建一个提供固定数字值的 `Stub`,作为 avg 升序的占位符
stubAvg := stub.On(ioutil, "ReadFile").Return([]byte("80"), nil)

实战案例:

假设我们有一个函数 GetCustomerAge,它从依赖项 CustomerService

func GetCustomerAge(customerID int64) (int, error) {
    customer, err := service.GetCustomer(customerID)
    if err != nil {
        return 0, err
    }
    return customer.Age, nil
}

Introduisez Mock dans la fonction de test :

func TestGetCustomerAgeWithMock(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}

    // 设置 Mock 期望值
    mockCustomerService.On("GetCustomer", mock.Anything).Return(&models.Customer{Age: 25}, nil)

    age, err := GetCustomerAge(1)
    assert.NoError(t, err)
    assert.Equal(t, 25, age)
}
Définissez la valeur attendue de Mock :
func TestGetCustomerAgeWithStub(t *testing.T) {
    stubCustomerService := stub.On(service, "GetCustomer").Return(&models.Customer{Age: 25}, nil)

    age, err := GetCustomerAge(1)
    assert.NoError(t, err)
    assert.Equal(t, 25, age)

    // 断言 Stub 是否被调用
    assert.True(t, stubCustomerService.Called())
}

Utilisation de Stubs :

Présentation du package Stub :

rrreee

Création de Stub dans la fonction de test : 🎜rrreee🎜🎜Cas pratique : 🎜🎜🎜Supposons que nous ayons une fonction GetCustomerAge, qui dépend de la dépendance CustomerService obtient les données client. 🎜rrreee🎜🎜Tests avec des Mocks : 🎜🎜rrreee🎜🎜Tests avec des Stubs : 🎜🎜rrreee🎜En utilisant des Mocks et des Stubs, nous pouvons améliorer les fonctions en les isolant des dépendances externes et en vérifiant leur comportement dans un environnement réel. Testez la robustesse et la confiance. 🎜

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