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.
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 ialah:
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 库进行模拟。首先,我们定义要模拟的接口:
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) }
http.Client
kerana ia adalah Kebergantungan luar. Gunakan GoogleMock untuk simulasiAnda 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) }
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: 🎜rrreeeAtas ialah kandungan terperinci Teknik mengejek dalam ujian unit fungsi Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!