Olok-olok dan stub dalam ujian fungsi Golang

WBOY
Lepaskan: 2024-04-16 18:54:01
asal
388 orang telah melayarinya

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

在测试函数中引入 Mock:

import mocks "github.com/your-org/your-repo/api/mocks"

func TestFunctionWithCustomerService(t *testing.T) {
    mockCustomerService := &mocks.CustomerService{}
}
Salin selepas log masuk

设置 Mock 期望值:

// 设置客户创建方法的预期行为
mockCustomerService.On("CreateCustomer", mock.Anything).Return(nil, nil)
Salin selepas log masuk

使用 Stubs:

引入 Stub 包:

import "github.com/stretchr/testify/stub"
Salin selepas log masuk

在测试函数中创建 Stub:

// 创建一个提供固定数字值的 `Stub`,作为 avg 升序的占位符
stubAvg := stub.On(ioutil, "ReadFile").Return([]byte("80"), nil)
Salin selepas log masuk

实战案例:

假设我们有一个函数 GetCustomerAge,它从依赖项 CustomerService

func GetCustomerAge(customerID int64) (int, error) {
    customer, err := service.GetCustomer(customerID)
    if err != nil {
        return 0, err
    }
    return customer.Age, nil
}
Salin selepas log masuk

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

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