Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengintegrasikan perpustakaan pihak ketiga dalam ujian unit Golang?

Bagaimana untuk mengintegrasikan perpustakaan pihak ketiga dalam ujian unit Golang?

PHPz
PHPzasal
2024-06-04 12:24:58825semak imbas

Menyepadukan perpustakaan pihak ketiga dalam ujian unit Golang boleh dicapai melalui suntikan kebergantungan atau menggunakan stub: Suntikan ketergantungan: Gunakan olok-olok atau stub dan bukannya pelaksanaan perpustakaan sebenar. Contoh: Gunakan MockDependency untuk mengejek perpustakaan pihak ketiga dan menyuntiknya ke dalam fungsi yang sedang diuji. Stub: Menyediakan akses kepada pelaksanaan perpustakaan sebenar. Contoh: Gunakan stubFunc untuk stub fungsi sebenar dalam pustaka pihak ketiga dan mengatasi kelakuannya.

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

Cara menyepadukan perpustakaan pihak ketiga dalam ujian unit Golang

Menyepadukan perpustakaan pihak ketiga dalam ujian unit Golang memerlukan beberapa kemahiran. Artikel ini akan membimbing anda tentang cara untuk menyelesaikan tugasan ini dan memberikan contoh praktikal tentang cara untuk mencapainya.

1. Gunakan suntikan kebergantungan

Suntikan kebergantungan ialah cara yang berkesan untuk mengasingkan perpustakaan pihak ketiga dalam ujian. Ia membolehkan anda memberikan olok-olok atau stub dalam ujian anda dan bukannya menggunakan pelaksanaan perpustakaan sebenar.

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. Gunakan stub

Stub ialah cara lain untuk mengasingkan perpustakaan pihak ketiga. Tidak seperti olok-olok, stub menyediakan akses kepada pelaksanaan perpustakaan sebenar tetapi membolehkan anda mengawal panggilannya dengan memintas atau mengubah suai tingkah lakunya.

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)
}

Kes praktikal

Andaikata kita mempunyai fungsi NewService,它从第三方库 github.com/example/service untuk mendapatkan contoh perkhidmatan. Kita boleh menggunakan suntikan kebergantungan untuk menguji fungsi ini:

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)
}

Atas ialah kandungan terperinci Bagaimana untuk mengintegrasikan perpustakaan pihak ketiga dalam ujian unit Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn