Ujian unit penulisan di GO adalah mudah kerana pakej testing
terbina dalam. Berikut adalah pendekatan langkah demi langkah untuk menulis ujian unit:
foo.go
, buat fail ujian bernama foo_test.go
dalam pakej yang sama. Tulis Fungsi Ujian : Di dalam foo_test.go
, tulis fungsi yang bermula dengan Test
diikuti dengan nama fungsi yang diuji. Fungsi -fungsi ini mengambil argumen *testing.T
. Contohnya:
<code class="go">func TestFoo(t *testing.T) { // Test code here }</code>
Pernyataan : Gunakan t.Error
atau t.Errorf
untuk log ralat dan gagal ujian. t.Fatal
atau t.Fatalf
boleh digunakan untuk menghentikan ujian dengan segera jika sesuatu yang kritikal gagal.
<code class="go">if result != expected { t.Errorf("expected %v, but got %v", expected, result) }</code>
go test
di terminal dari direktori yang mengandungi fail ujian.go test -cover
.Ujian yang didorong oleh jadual : Gunakan pendekatan yang didorong oleh jadual untuk mengurangkan duplikasi kod dan menguji pelbagai senario dengan cekap.
<code class="go">func TestFoo(t *testing.T) { tests := []struct { input int expected int }{ {1, 2}, {2, 4}, {-1, -2}, } for _, tt := range tests { result := foo(tt.input) if result != tt.expected { t.Errorf("foo(%d) = %d, want %d", tt.input, result, tt.expected) } } }</code>
Mematuhi amalan terbaik dalam menulis ujian unit di GO dapat meningkatkan kualiti dan pemeliharaan ujian anda dengan ketara. Berikut adalah beberapa amalan utama:
TestFooReturnsDoubleOfInput
lebih deskriptif daripada TestFoo
. Ujian selari : Gunakan t.Parallel()
untuk menjalankan ujian secara selari, yang boleh mempercepatkan suite ujian anda, terutamanya untuk projek yang lebih besar.
<code class="go">func TestFoo(t *testing.T) { t.Parallel() // Test code here }</code>
Mengejutkan dalam GO boleh membantu mengasingkan unit yang diuji dengan menggantikan kebergantungannya dengan objek palsu yang terkawal. Berikut adalah cara anda boleh menggunakan mengejek untuk meningkatkan ujian unit anda:
Pilih Perpustakaan Mocking : Perpustakaan Go Mocking Popular termasuk GoMock
, testify/mock
, dan gomock
. Sebagai contoh, dengan testify/mock
:
<code class="go">import ( "testing" "github.com/stretchr/testify/mock" ) type MockDependency struct { mock.Mock } func (m *MockDependency) SomeMethod(input string) string { args := m.Called(input) return args.String(0) }</code>
Harapan Persediaan : Sebelum melaksanakan fungsi di bawah ujian, sediakan tingkah laku yang diharapkan dari mock menggunakan API perpustakaan.
<code class="go">mockDependency := new(MockDependency) mockDependency.On("SomeMethod", "input").Return("output")</code>
Menegaskan panggilan mock : Selepas ujian, sahkan bahawa mock itu dipanggil seperti yang diharapkan.
<code class="go">mockDependency.AssertCalled(t, "SomeMethod", "input")</code>
Beberapa alat boleh membantu anda mengurus dan menjalankan ujian unit dengan cekap di GO. Berikut adalah senarai beberapa yang popular:
go test
terbina dalam adalah serba boleh dan boleh digunakan dengan pelbagai bendera untuk menyesuaikan pelaksanaan ujian. Sebagai contoh, go test -v
untuk output verbose atau go test -coverprofile=coverage.out
untuk menghasilkan laporan liputan.Gomega
untuk pencocokan dan pernyataan.require
pernyataan ujian, assert
pernyataan fasih, suite
untuk organisasi ujian, dan mock
untuk mengejek kebergantungan.Menggunakan alat ini dalam kombinasi dapat membantu menyelaraskan proses ujian anda, meningkatkan liputan ujian, dan menjadikan suite ujian anda lebih dapat dipelihara dan cekap.
Atas ialah kandungan terperinci Bagaimana anda menulis ujian unit di GO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!