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>
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.
mockDatabase
, mockgetData
). 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
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!