>백엔드 개발 >Golang >Go 함수 단위 테스트의 모의 기술

Go 함수 단위 테스트의 모의 기술

WBOY
WBOY원래의
2024-04-30 18:21:01664검색

단위 테스트 모의는 외부 종속성을 대체하기 위해 단위 테스트에서 테스트 더블을 생성하여 특정 기능을 격리하고 테스트하는 기술입니다. 기본 원칙은 인터페이스 정의, 모의 생성, 모의 주입입니다. GoogleMock 모의를 사용하려면 인터페이스를 정의하고 모의를 생성한 후 테스트 함수에 삽입해야 합니다. testify/mock 시뮬레이션을 사용하려면 MockClient 구조를 선언하고 Get 메서드에 예상되는 값을 설정하고 테스트 함수에서 시뮬레이션을 설정해야 합니다.

Go 函数单元测试中的模拟技巧

Go 함수 단위 테스트의 모킹 기술

단위 테스트에서 모킹은 테스트 중인 코드의 외부 종속성을 대체하기 위해 테스트 더블을 생성하는 기술입니다. 이를 통해 다른 구성 요소와 상호 작용하지 않고도 특정 기능을 격리하고 테스트할 수 있습니다.

모킹의 기본 원칙

모의의 기본 원칙은 다음과 같습니다.

  1. 인터페이스 정의: 모킹할 구성 요소를 나타내는 인터페이스를 만듭니다.
  2. 모의 생성: 예상되는 호출과 반환된 값을 정의할 수 있는 이 인터페이스의 모의 구현을 생성합니다.
  3. 모의 항목 삽입: 테스트 함수에서 실제 종속성을 모의 항목으로 대체합니다.

실용 사례

net/http 패키지를 사용하여 다음 함수를 고려하세요. net/http 包的函数:

func GetPage(url string) (*http.Response, error) {
    client := http.Client{}
    return client.Get(url)
}

要测试此函数,我们需要模拟 http.Client,因为它是一个外部依赖项。

使用 GoogleMock 进行模拟

可以使用 GoogleMock 库进行模拟。首先,我们定义要模拟的接口:

type MockClient interface {
    Get(url string) (*http.Response, error)
}

然后,我们可以使用 new(MockClient)

import (
    "testing"

    "github.com/golang/mock/gomock"
)

func TestGetPage(t *testing.T) {
    ctrl := gomock.NewController(t)
    defer ctrl.Finish()

    client := mock.NewMockClient(ctrl)
    client.EXPECT().Get("http://example.com").Return(&http.Response{}, nil)

    resp, err := GetPage("http://example.com")
    assert.NoError(t, err)
    assert.NotNil(t, resp)
}

이 함수를 테스트하려면 http.Client를 모의해야 합니다. 외부 종속성.

시뮬레이션에 GoogleMock 사용

시뮬레이션에 GoogleMock 라이브러리를 사용할 수 있습니다. 먼저 모의할 인터페이스를 정의합니다: 🎜
import (
    "testing"

    "github.com/stretchr/testify/mock"
)

type MockClient struct {
    mock.Mock
}

func (m *MockClient) Get(url string) (*http.Response, error) {
    args := m.Called(url)
    return args.Get(0).(*http.Response), args.Error(1)
}

func TestGetPage(t *testing.T) {
    client := new(MockClient)
    client.On("Get", "http://example.com").Return(&http.Response{}, nil)

    resp, err := GetPage("http://example.com")
    assert.NoError(t, err)
    assert.NotNil(t, resp)
}
🎜 그런 다음 new(MockClient)를 사용하여 모의를 생성하고 이를 테스트 함수에 삽입할 수 있습니다: 🎜rrreee🎜 testify/mock을 사용하여 모의🎜🎜 testify/mock 라이브러리는 조롱 기능도 제공합니다. 사용 예는 다음과 같습니다: 🎜rrreee

위 내용은 Go 함수 단위 테스트의 모의 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.