Rumah > pembangunan bahagian belakang > Golang > Bagaimana anda menulis ujian unit di GO?

Bagaimana anda menulis ujian unit di GO?

百草
Lepaskan: 2025-03-21 18:34:34
asal
162 orang telah melayarinya

Bagaimana anda menulis ujian unit dalam perjalanan?

Ujian unit penulisan di GO adalah mudah kerana pakej testing terbina dalam. Berikut adalah pendekatan langkah demi langkah untuk menulis ujian unit:

  1. Buat fail ujian : Untuk fail sumber bernama foo.go , buat fail ujian bernama foo_test.go dalam pakej yang sama.
  2. 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>
    Salin selepas log masuk
  3. 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>
    Salin selepas log masuk
  4. Ujian Jalankan : Jalankan ujian menggunakan arahan go test di terminal dari direktori yang mengandungi fail ujian.
  5. Liputan Ujian : Untuk mendapatkan liputan ujian, lari go test -cover .
  6. 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>
    Salin selepas log masuk

Apakah amalan terbaik untuk menulis ujian unit yang berkesan di GO?

Mematuhi amalan terbaik dalam menulis ujian unit di GO dapat meningkatkan kualiti dan pemeliharaan ujian anda dengan ketara. Berikut adalah beberapa amalan utama:

  1. Pastikan ujian mudah dan fokus : Setiap ujian harus meliputi satu tingkah laku atau senario tertentu. Ini menjadikan ujian lebih mudah difahami dan dikekalkan.
  2. Gunakan nama deskriptif : Namakan fungsi ujian dan pembolehubah anda dengan jelas untuk menyampaikan tujuan mereka. Sebagai contoh, TestFooReturnsDoubleOfInput lebih deskriptif daripada TestFoo .
  3. Gunakan fungsi pembantu : Jika anda mendapati diri anda mengulangi persediaan atau logik penegasan yang sama merentasi pelbagai ujian, gerakkannya ke fungsi pembantu untuk mengurangkan duplikasi.
  4. Ujian untuk keadaan ralat : Jangan hanya menguji laluan gembira; Juga uji bagaimana fungsi anda berkelakuan dengan input tidak sah atau dalam keadaan ralat.
  5. 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>
    Salin selepas log masuk
  6. Ketergantungan Mock : Gunakan mengejek untuk mengasingkan fungsi yang diuji dari kebergantungan luaran, yang membolehkan ujian yang lebih terkawal dan boleh dipercayai.
  7. Mencapai Perlindungan Ujian Tinggi : Bertujuan untuk liputan ujian yang tinggi, tetapi ingat bahawa liputan 100% tidak selalu diperlukan. Fokus pada laluan kritikal dan kes kelebihan.
  8. Integrasi Berterusan : Mengintegrasikan ujian anda ke dalam saluran paip CI/CD untuk memastikan ujian dijalankan secara automatik pada setiap perubahan kod.

Bagaimanakah anda boleh menggunakan mengejek untuk meningkatkan ujian unit anda?

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:

  1. 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>
    Salin selepas log masuk
  2. Buat Objek Mock : Tentukan objek mengejek yang meniru antara muka kebergantungan yang anda ingin mengejek. Sediakan tingkah laku yang dijangkakan untuk mengejek ini sebelum menjalankan ujian.
  3. 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>
    Salin selepas log masuk
  4. Jalankan ujian : Laksanakan fungsi yang anda uji dengan kebergantungan mengejek. Mock akan berkelakuan seperti yang telah ditetapkan.
  5. Menegaskan panggilan mock : Selepas ujian, sahkan bahawa mock itu dipanggil seperti yang diharapkan.

     <code class="go">mockDependency.AssertCalled(t, "SomeMethod", "input")</code>
    Salin selepas log masuk
  6. Manfaat : Mengejar membolehkan anda menguji tingkah laku kod anda secara berasingan, menjadikan ujian lebih cepat dan lebih dipercayai. Ia juga membolehkan ujian senario ralat tanpa menjejaskan perkhidmatan sebenar.

Alat apa yang boleh membantu anda mengurus dan menjalankan ujian unit dengan cekap di GO?

Beberapa alat boleh membantu anda mengurus dan menjalankan ujian unit dengan cekap di GO. Berikut adalah senarai beberapa yang popular:

  1. Perintah Ujian Go : Perintah 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.
  2. Ginkgo : Rangka kerja ujian lanjutan yang menawarkan DSL yang lebih mudah dibaca dan sokongan yang lebih baik untuk integrasi dan ujian akhir-ke-akhir. Ia boleh digunakan bersempena dengan Gomega untuk pencocokan dan pernyataan.
  3. Memberi keterangan : Satu pakej yang berkaitan dengan ujian yang termasuk require pernyataan ujian, assert pernyataan fasih, suite untuk organisasi ujian, dan mock untuk mengejek kebergantungan.
  4. GOCONVEY : Rangka kerja ujian alternatif yang menyediakan cara yang lebih interaktif dan visual untuk menulis ujian dan hasil tontonan, yang sangat berguna untuk TDD.
  5. Delve : Debugger untuk GO yang boleh digunakan untuk melangkah melalui ujian, membantu anda mendiagnosis dan menyelesaikan masalah dengan lebih cekap.
  6. Coveralls : Alat yang boleh diintegrasikan ke dalam saluran paip CI anda untuk mengesan dan melaporkan liputan ujian dari masa ke masa, membantu memastikan suite ujian anda tetap berkesan.
  7. CircleCi, Travis CI, atau GitHub Tindakan : Perkhidmatan integrasi berterusan ini boleh mengautomasikan ujian anda, memberikan maklum balas segera mengenai kesihatan asas kod anda selepas setiap komit.

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!

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