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.
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 }
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) }
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 fonctionGetCustomerAge
, 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!