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

Teknik mengejek dalam ujian unit fungsi Go

WBOY
WBOYasal
2024-04-30 18:21:01587semak imbas

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

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

使用 GoogleMock 进行模拟

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

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

然后,我们可以使用 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)
}

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

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