Golang 기능 테스트의 모의 및 스텁

WBOY
풀어 주다: 2024-04-16 18:54:01
원래의
388명이 탐색했습니다.

Mock과 Stubs를 사용하면 Go 기능 테스트에서 외부 종속성을 격리하고 확인할 수 있습니다. Mock은 종속성의 동작을 시뮬레이션하는 반면 Stubs는 고정된 값을 제공합니다. Mock을 사용하려면 mockgen을 사용하여 모의 파일을 생성하고, 테스트에 모의를 도입하고, 모의 기대치를 설정해야 합니다. 스텁을 사용하려면 스텁 패키지를 도입하고, 스텁을 생성하고, 스텁 호출 여부를 확인해야 합니다. Mock과 Stubs를 사용하면 기능 테스트의 견고성과 신뢰성을 향상시킬 수 있습니다.

Golang 函数测试中的 mocks 和 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
}
로그인 후 복사

테스트 함수에 Mock 소개:

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)
}
로그인 후 복사
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())
}
로그인 후 복사
CustomerService는 고객 데이터를 가져옵니다. rrreee

Mock으로 테스트:

rrreee

Stub으로 테스트: 🎜🎜rrreee🎜Mock과 Stubs를 사용하면 기능을 외부 종속성으로부터 격리하고 실제 환경에서 동작을 검증하여 기능을 개선할 수 있습니다. 견고성과 신뢰성을 테스트하세요. 🎜

위 내용은 Golang 기능 테스트의 모의 및 스텁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿