Mocks und Stubs ermöglichen die Isolierung und Überprüfung externer Abhängigkeiten beim Go-Funktionstest. Mocks simulieren das Verhalten von Abhängigkeiten, während Stubs feste Werte bereitstellen. Um Mocks zu verwenden, müssen Sie Mockgen verwenden, um Mock-Dateien zu generieren, Mocks in Tests einzuführen und Mock-Erwartungen festzulegen. Um Stubs zu verwenden, müssen Sie das Stub-Paket einführen, den Stub erstellen und feststellen, ob der Stub aufgerufen wird. Durch die Verwendung von Mocks und Stubs können wir die Robustheit und Zuverlässigkeit von Funktionstests verbessern.
So verwenden Sie Mocks und Stubs beim Funktionstest in Go
Mocks und Stubs sind effektive Techniken zum Isolieren und Validieren externer Abhängigkeiten beim Funktionstest in Go. Im Folgenden erfahren Sie, wie Sie diese Techniken beim Testen verwenden.
Was sind Mocks und Stubs?
Mock ist ein Ersatz für das Verspotten externer Abhängigkeiten und ermöglicht es Ihnen, deren Verhalten und Eigenschaften in Ihren Tests anzugeben. Im Gegensatz dazu ist ein Stub ein Ersatz, der feste Werte bereitstellt, ohne das Verhalten von Abhängigkeiten zu simulieren.
Verwenden Sie Mocks:
Verwenden Sie mockgen
, um mock
-Dateien zu generieren: 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()) }
Stubs verwenden:
Stub-Paket vorstellen:rrreee
Stub in Testfunktion erstellen: 🎜rrreee🎜🎜Praktischer Fall: 🎜🎜🎜Angenommen, wir haben eine FunktionGetCustomerAge
, die von der Abhängigkeit CustomerService ruft Kundendaten ab. 🎜rrreee🎜🎜Testen mit Mocks: 🎜🎜rrreee🎜🎜Testen mit Stubs: 🎜🎜rrreee🎜Durch die Verwendung von Mocks und Stubs können wir Funktionen verbessern, indem wir sie von externen Abhängigkeiten isolieren und ihr Verhalten in einer realen Umgebung überprüfen. Testen Sie Robustheit und Vertrauen. 🎜Das obige ist der detaillierte Inhalt vonMocks und Stubs beim Golang-Funktionstest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!