> 백엔드 개발 > Golang > Golang 단위 테스트에 타사 라이브러리를 통합하는 방법은 무엇입니까?

Golang 단위 테스트에 타사 라이브러리를 통합하는 방법은 무엇입니까?

PHPz
풀어 주다: 2024-06-04 12:24:58
원래의
856명이 탐색했습니다.

Golang 단위 테스트에 타사 라이브러리를 통합하는 것은 종속성 주입이나 스텁을 사용하여 달성할 수 있습니다. 종속성 주입: 실제 라이브러리 구현 대신 모의 또는 스텁을 사용합니다. 예: MockDependency를 사용하여 타사 라이브러리를 모의하고 이를 테스트 중인 함수에 삽입합니다. 스텁: 실제 라이브러리 구현에 대한 액세스를 제공합니다. 예: stubFunc를 사용하여 타사 라이브러리의 실제 함수를 스텁하고 해당 동작을 재정의합니다.

如何在 Golang 单元测试中集成第三方库?

Golang 단위 테스트에 타사 라이브러리를 통합하는 방법

Golang 단위 테스트에 타사 라이브러리를 통합하려면 몇 가지 기술이 필요합니다. 이 문서에서는 이 작업을 수행하는 방법을 안내하고 이를 수행하는 방법에 대한 실제 예를 제공합니다.

1. 종속성 주입 사용

종속성 주입은 테스트에서 타사 라이브러리를 격리하는 효과적인 방법입니다. 실제 라이브러리 구현을 사용하는 대신 테스트에 모의 또는 스텁을 제공할 수 있습니다.

import (
    "testing"

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

// MockDependency 模拟第三方库
type MockDependency struct {
    result int
}

// Method 模拟第三方库的方法
func (m *MockDependency) Method() int {
    return m.result
}

func TestFunctionUnderTest(t *testing.T) {
    // 使用模拟的依赖项
    dependency := &MockDependency{result: 42}

    // 调用待测函数
    result := FunctionUnderTest(dependency)

    // 断言结果
    assert.Equal(t, 42, result)
}
로그인 후 복사

2. 스텁 사용

스텁은 타사 라이브러리를 격리하는 또 다른 방법입니다. 모의 객체와 달리 스텁은 실제 라이브러리 구현에 대한 액세스를 제공하지만 해당 동작을 가로채거나 수정하여 호출을 제어할 수 있습니다.

import (
    "testing"

    "github.com/stretchr/testify/assert"
    "github.com/google/go-cmp/cmp"
)

func TestFunctionUnderTest(t *testing.T) {
    // 使用存根函数
    stubFunc := func() (string, error) {
        return "stubbed result", nil
    }
    originalFunc := library.Func

    // 覆盖实际函数
    library.Func = stubFunc

    // 调用待测函数
    result, err := FunctionUnderTest()

    // 还原实际函数
    library.Func = originalFunc

    // 断言结果
    assert.NoError(t, err)
    diff := cmp.Diff("stubbed result", result)
    assert.Empty(t, diff)
}
로그인 후 복사

실용 사례

서비스 인스턴스를 가져오는 함수 NewService,它从第三方库 github.com/example/service가 있다고 가정해 보겠습니다. 종속성 주입을 사용하여 이 기능을 테스트할 수 있습니다.

import (
    "testing"

    "github.com/stretchr/testify/assert"
    "github.com/example/service"
)

// MockService 模拟 service 库
type MockService struct {
    result *service.Service
}

// NewMockService 返回一个模拟的服务实例
func NewMockService(result *service.Service) *MockService {
    return &MockService{result: result}
}

// Service 返回模拟的服务实例
func (m *MockService) Service() *service.Service {
    return m.result
}

func TestNewService(t *testing.T) {
    // 使用模拟的服务
    mockService := NewMockService(&service.Service{})

    // 调用待测函数
    newService, err := NewService(mockService)

    // 断言结果
    assert.NoError(t, err)
    assert.Equal(t, &service.Service{}, newService)
}
로그인 후 복사

위 내용은 Golang 단위 테스트에 타사 라이브러리를 통합하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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