Bagaimana untuk mengintegrasikan perpustakaan pihak ketiga dalam ujian unit Golang?

PHPz
Lepaskan: 2024-06-04 12:24:58
asal
772 orang telah melayarinya

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!