Mocks and Stubs membenarkan pengasingan dan pengesahan kebergantungan luaran dalam ujian fungsi Go. Olok-olok mensimulasikan tingkah laku kebergantungan, manakala Stubs memberikan nilai tetap. Untuk menggunakan Mocks, anda perlu menggunakan mockgen untuk menjana fail olok-olok, memperkenalkan olok-olok dalam ujian dan menetapkan jangkaan olok-olok. Untuk menggunakan Stubs, anda perlu memperkenalkan pakej stub, mencipta stub dan menegaskan sama ada stub dipanggil. Dengan menggunakan Mocks and Stubs, kami boleh meningkatkan keteguhan dan keyakinan ujian fungsi.
Cara menggunakan ujian fungsi Mocks and Stubs dalam Go
Mocks and Stubs ialah teknik yang berkesan untuk mengasingkan dan mengesahkan kebergantungan luaran apabila melakukan ujian fungsi dalam Go. Di bawah ini kita akan meneroka cara menggunakan teknik ini dalam ujian.
Apakah Mocks dan Stubs?
Mock ialah pengganti kebergantungan luar yang mengejek, membolehkan anda menentukan tingkah laku dan ciri mereka dalam ujian anda. Sebaliknya, rintisan ialah penggantian yang memberikan nilai tetap tanpa mensimulasikan tingkah laku kebergantungan.
Gunakan Mock:
Gunakan mockgen
untuk menjana fail 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) }
Menggunakan Stub:
Memperkenalkan pakej Stub: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()) }
Atas ialah kandungan terperinci Olok-olok dan stub dalam ujian fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!