Rumah > pembangunan bahagian belakang > Golang > Teknik mengejek dalam ujian unit fungsi Go

Teknik mengejek dalam ujian unit fungsi Go

WBOY
Lepaskan: 2024-04-30 18:21:01
asal
663 orang telah melayarinya

Mengejek dalam ujian unit ialah teknik mencipta gandaan ujian dalam ujian unit untuk menggantikan kebergantungan luaran, membolehkan fungsi tertentu diasingkan dan diuji. Prinsip asas ialah: tentukan antara muka, cipta olok-olok, suntikan olok-olok. Untuk menggunakan olok-olok GoogleMock, anda perlu menentukan antara muka, mencipta olok-olok dan menyuntiknya dalam fungsi ujian. Untuk menggunakan simulasi saksi/olok-olok, anda perlu mengisytiharkan struktur MockClient, tetapkan nilai yang diharapkan untuk kaedah Dapatkan dan tetapkan simulasi dalam fungsi ujian.

Go 函数单元测试中的模拟技巧

Teknik mengejek dalam ujian unit fungsi Go

Dalam ujian unit, mengejek ialah teknik untuk mencipta beregu ujian untuk menggantikan kebergantungan luaran dalam kod yang sedang diuji. Ini membolehkan anda mengasingkan dan menguji fungsi tertentu tanpa berinteraksi dengan komponen lain.

Prinsip asas mengejek

Prinsip asas mengejek ialah:

  1. Tentukan antara muka: Cipta antara muka yang mewakili komponen yang akan dipermainkan.
  2. Buat Olok-olok: Buat pelaksanaan olok-olok antara muka ini yang boleh mentakrifkan panggilan yang dijangkakan dan nilai yang dikembalikan.
  3. Suntikan olok-olok: Dalam fungsi ujian, gantikan kebergantungan sebenar dengan olok-olok.

Contoh Praktikal

Pertimbangkan fungsi berikut menggunakan pakej net/http: net/http 包的函数:

func GetPage(url string) (*http.Response, error) {
    client := http.Client{}
    return client.Get(url)
}
Salin selepas log masuk

要测试此函数,我们需要模拟 http.Client,因为它是一个外部依赖项。

使用 GoogleMock 进行模拟

可以使用 GoogleMock 库进行模拟。首先,我们定义要模拟的接口:

type MockClient interface {
    Get(url string) (*http.Response, error)
}
Salin selepas log masuk

然后,我们可以使用 new(MockClient)

import (
    "testing"

    "github.com/golang/mock/gomock"
)

func TestGetPage(t *testing.T) {
    ctrl := gomock.NewController(t)
    defer ctrl.Finish()

    client := mock.NewMockClient(ctrl)
    client.EXPECT().Get("http://example.com").Return(&http.Response{}, nil)

    resp, err := GetPage("http://example.com")
    assert.NoError(t, err)
    assert.NotNil(t, resp)
}
Salin selepas log masuk

Untuk menguji fungsi ini kita perlu mengejek http.Client kerana ia adalah Kebergantungan luar.

Gunakan GoogleMock untuk simulasi

Anda boleh menggunakan perpustakaan GoogleMock untuk simulasi. Mula-mula, kita mentakrifkan antara muka untuk mengejek: 🎜
import (
    "testing"

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

type MockClient struct {
    mock.Mock
}

func (m *MockClient) Get(url string) (*http.Response, error) {
    args := m.Called(url)
    return args.Get(0).(*http.Response), args.Error(1)
}

func TestGetPage(t *testing.T) {
    client := new(MockClient)
    client.On("Get", "http://example.com").Return(&http.Response{}, nil)

    resp, err := GetPage("http://example.com")
    assert.NoError(t, err)
    assert.NotNil(t, resp)
}
Salin selepas log masuk
🎜 Kemudian, kita boleh membuat olok-olok menggunakan new(MockClient) dan menyuntiknya dalam fungsi ujian: 🎜rrreee🎜Mock menggunakan testimoni/mock🎜🎜 The perpustakaan saksi/olok-olok juga menyediakan fungsi mengejek. Contoh penggunaan adalah seperti berikut: 🎜rrreee

Atas ialah kandungan terperinci Teknik mengejek dalam ujian unit fungsi Go. 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