Rumah > pembangunan bahagian belakang > Golang > Bagaimana saya menulis objek dan stub untuk ujian di GO?

Bagaimana saya menulis objek dan stub untuk ujian di GO?

Johnathan Smith
Lepaskan: 2025-03-10 17:38:17
asal
467 orang telah melayarinya

Bagaimana untuk menulis objek mengejek dan stub untuk ujian di GO?

Go tidak mempunyai rangka kerja mengejek seperti beberapa bahasa lain (misalnya, mockito untuk Java). Walau bagaimanapun, anda boleh membuat ejekan dan stub dengan berkesan menggunakan antara muka dan struktur. Kuncinya adalah untuk menentukan antara muka yang mewakili kebergantungan kod anda berinteraksi dengan. Kemudian, anda membuat pelaksanaan konkrit untuk kod sebenar anda dan pelaksanaan mock berasingan untuk ujian.

Mari kita ilustrasikan dengan contoh: bayangkan anda mempunyai fungsi yang berinteraksi dengan pangkalan data:

*Realdatabase) getData (id int) (rentetan, ralat) {// ... interaksi pangkalan data sebenar ... return & quot; data dari pangkalan data & quot;, nil} func processData (db pangkalan data, id int) & quot; diproses: & quot; Data, nil}

Sekarang, mari buat mock:

 <code class="go"> type mockDatabase struct {getDataFunc func (int) (string, ralat)} func (m *mockDatabase) m.getDataFunc (id)} kembali & quot; & quot;, nil // atau mengembalikan nilai/error lalai} </code> 
Salin selepas log masuk

dalam ujian anda, anda boleh menggunakan mockDatabase untuk mengawal nilai pulangan mockdb: = & amp; mockDatabase {getDataFunc: func (id int) (string, error) {if id == 1 {return & quot; data ujian & quot;, nil} return & quot;, errors.new (& quot; data tidak dijumpai & quot; assert.equal (t, & quot; diproses: data ujian & quot;, hasil) hasil, err = processData (mockdb, 2) assert.error (t, err)}

Contoh ini menunjukkan mock mudah. Stub lebih mudah; Mereka biasanya mengembalikan nilai -nilai yang telah ditetapkan tanpa logik kompleks dalam fungsi mock.

Apakah amalan terbaik untuk menggunakan objek mock dalam ujian unit GO?

  • Elakkan membuat mocks terlalu kompleks yang meniru terlalu banyak fungsi.
  • Gunakan antara muka secara konsisten: antara muka adalah penting untuk mengejek yang berkesan. Pastikan kod anda berinteraksi dengan kebergantungan melalui antara muka, bukan jenis konkrit. Kaedah (contohnya, mockDatabase , mockgetData ).
  • Kurangkan interaksi mock: Elakkan mengejek berlebihan. Sekiranya anda mendapati diri anda mengejek banyak lapisan kebergantungan, ia mungkin menunjukkan kecacatan reka bentuk. Pertimbangkan refactoring kod anda untuk kesesuaian yang lebih baik.
  • Pergi ujian. Dengan menggantikan kebergantungan sebenar dengan mengejek, anda menghapuskan faktor luaran yang boleh menjejaskan keputusan ujian anda. Ini memastikan bahawa ujian anda hanya memberi tumpuan kepada tingkah laku unit yang diuji. Ujian ini boleh mengesahkan tingkah laku ProcessData tanpa mengira keadaan atau ketersediaan pangkalan data. Pengasingan ini adalah kunci untuk menulis ujian unit yang boleh dipercayai dan berulang. Perpustakaan popular yang menyediakan pendekatan penjanaan kod untuk mencipta mocks. Ia boleh mengautomasikan penciptaan struktur dan kaedah mock berdasarkan antara muka anda, mengurangkan kod boilerplate.
  • gomock : Satu lagi pesaing yang kuat, gomock menawarkan penyelesaian penghinaan yang lebih kuat dan fleksibel. Ia membolehkan senario mengejek yang lebih maju, termasuk penetapan dan pengesahan jangkaan. Walau bagaimanapun, ia memerlukan sedikit persediaan.

Memilih antara perpustakaan ini sering bergantung kepada kerumitan projek dan keutamaan. Untuk projek yang lebih mudah, secara manual membuat mengejek mungkin cukup. Untuk projek yang lebih besar atau keperluan mengejek kompleks, memberi keterangan/mengejek atau gomock dapat meningkatkan kecekapan dan mengurangkan boilerplate.

Atas ialah kandungan terperinci Bagaimana saya menulis objek dan stub untuk ujian 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan