Mock과 Stubs를 사용하면 Go 기능 테스트에서 외부 종속성을 격리하고 확인할 수 있습니다. Mock은 종속성의 동작을 시뮬레이션하는 반면 Stubs는 고정된 값을 제공합니다. Mock을 사용하려면 mockgen을 사용하여 모의 파일을 생성하고, 테스트에 모의를 도입하고, 모의 기대치를 설정해야 합니다. 스텁을 사용하려면 스텁 패키지를 도입하고, 스텁을 생성하고, 스텁 호출 여부를 확인해야 합니다. Mock과 Stubs를 사용하면 기능 테스트의 견고성과 신뢰성을 향상시킬 수 있습니다.
Go 기능 테스트에서 Mock 및 Stubs를 사용하는 방법
Mock 및 Stubs는 Go에서 기능 테스트를 수행할 때 외부 종속성을 격리하고 검증하는 효과적인 기술입니다. 아래에서는 테스트에서 이러한 기술을 사용하는 방법을 살펴보겠습니다.
Mock과 Stub이 무엇인가요?
Mock은 외부 종속성 모의를 대체하여 테스트에서 해당 동작과 특성을 지정할 수 있습니다. 반면, 스텁은 종속성의 동작을 시뮬레이션하지 않고 고정된 값을 제공하는 대체품입니다.
Mock 사용:
mockgen
을 사용하여 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()) }
Mock으로 테스트:
rrreeeStub으로 테스트: 🎜🎜rrreee🎜Mock과 Stubs를 사용하면 기능을 외부 종속성으로부터 격리하고 실제 환경에서 동작을 검증하여 기능을 개선할 수 있습니다. 견고성과 신뢰성을 테스트하세요. 🎜위 내용은 Golang 기능 테스트의 모의 및 스텁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!