Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Olok-olok dan stub dalam ujian fungsi Golang

Olok-olok dan stub dalam ujian fungsi Golang

WBOY
WBOYasal
2024-04-16 18:54:01344semak imbas

Mocks and Stubs membenarkan pengasingan dan pengesahan kebergantungan luaran dalam ujian fungsi Go. Olok-olok mensimulasikan tingkah laku kebergantungan, manakala Stubs memberikan nilai tetap. Untuk menggunakan Mocks, anda perlu menggunakan mockgen untuk menjana fail olok-olok, memperkenalkan olok-olok dalam ujian dan menetapkan jangkaan olok-olok. Untuk menggunakan Stubs, anda perlu memperkenalkan pakej stub, mencipta stub dan menegaskan sama ada stub dipanggil. Dengan menggunakan Mocks and Stubs, kami boleh meningkatkan keteguhan dan keyakinan ujian fungsi.

Golang 函数测试中的 mocks 和 stubs

Cara menggunakan ujian fungsi Mocks and Stubs dalam Go

Mocks and Stubs ialah teknik yang berkesan untuk mengasingkan dan mengesahkan kebergantungan luaran apabila melakukan ujian fungsi dalam Go. Di bawah ini kita akan meneroka cara menggunakan teknik ini dalam ujian.

Apakah Mocks dan Stubs?

Mock ialah pengganti kebergantungan luar yang mengejek, membolehkan anda menentukan tingkah laku dan ciri mereka dalam ujian anda. Sebaliknya, rintisan ialah penggantian yang memberikan nilai tetap tanpa mensimulasikan tingkah laku kebergantungan.

Gunakan Mock:

Gunakan mockgen untuk menjana fail 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
}

Perkenalkan Mock dalam fungsi ujian:

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)
}
Tetapkan nilai jangkaan Mock:

Menggunakan Stub:

Memperkenalkan pakej Stub:

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

Mencipta Stub dalam fungsi ujian: 🎜rrreee🎜🎜Kes praktikal: 🎜🎜🎜Andaikan kita mempunyai fungsi bergantung pada . kod >CustomerService mendapat data pelanggan. 🎜rrreee🎜🎜Menguji dengan Mocks: 🎜🎜rrreee🎜🎜Menguji dengan Stubs: 🎜🎜rrreee🎜Dengan menggunakan Mocks and Stubs, kami boleh menambah baik fungsi dengan mengasingkannya daripada kebergantungan luaran dan mengesahkan kekukuhannya dalam persekitaran sebenar. 🎜

Atas ialah kandungan terperinci Olok-olok dan stub dalam ujian fungsi 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