Maison > développement back-end > Golang > le corps du texte

Mocks et stubs dans les tests de fonction Golang

WBOY
Libérer: 2024-04-16 18:54:01
original
388 Les gens l'ont consulté

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
Copier après la connexion

在测试函数中引入 Mock:

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

func TestFunctionWithCustomerService(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}
}
Copier après la connexion

设置 Mock 期望值:

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

使用 Stubs:

引入 Stub 包:

import "github.com/stretchr/testify/stub"
Copier après la connexion

在测试函数中创建 Stub:

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

实战案例:

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

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

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)
}
Copier après la connexion
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())
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
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