Mendapatkan pegangan pada pengujian dan mengejek golang

Go adalah bahasa yang relatif baru tidak standar atau praktek terbaik dan uji mengejek. Kami membuat minat yang besar dalam pengujian IC dan kesatuan dan untuk itu Anda perlu infrastruktur pengujian tepat. Meskipun golang infrastruktur uji perpustakaan standar

Persyaratan:

  • mengejek sebagian
  • 3rd Party & amp; amp; amp; Standard Library mengejek perpustakaan
  • Mock gen
  • Sebuah kerangka tes sederhana (yaitu fungsi teardown / Setup), yang untuk test suite
  • laporan cakupan kode
  • Hewan

  • mudah untuk menemukan baris kode yang tidak tercakup.

Partial Mocking

Bagian mengejek memungkinkan kita tidak hanya menertawakan seluruh paket dan menguji beberapa fitur tambahan. Ini tidak dicapai dengan “withmock” karena membuat menyenangkan dari seluruh paket, bukan hanya nama metode tertentu. Di sini kita dapat menggunakan metode sederhana yang menggantikan metode pelaksanaan yang sebenarnya dengan model, tetapi dalam fungsi aslinya ketika tes selesai. Untungnya, Go memperlakukan fungsi sebagai warga negara kelas satu dan kita dapat menetapkan fungsi Vars. Sebagai contoh:

 var myNameMethod = func (nama string) {string 
 // Sesuatu Nama 
 RMA 
} 
 newName:. MyNameMethod = () 

Sekarang kita dapat menggantikan fungsi ini dan mereka tertawa pada fungsi kami untuk menguji penggantian

 Lihat util.Patch (& amp; amp; myNameMethod, func (rantai path) {// menegaskan nilai-nilai}). Kembalikan () 

Lain kali kita akan memanggil myNameMethod yang disebut fungsi saya dipermainkan. Ketika kami menyelesaikan tinjauan untuk mengembalikannya ke fungsi aslinya. Metode ini berasal dari kelompok golang kacang di Google. Anda dapat menggunakan jalur / Restore pelaksanaan ditampilkan di sini: https://gist.github.com/imosquera/6716490

Mock-Generation

salah satu bagian yang paling menyakitkan untuk pengujian menciptakan antarmuka simulasi. Bahkan setelah Mock sukses masih banyak boilerplate bahwa metode ini harus dilakukan untuk memastikan bahwa yang disebut dengan parameter yang benar. Di sinilah mockgen coding paket gomock bersinar: https://code.google.com/p/gomock. Pertama, paket mockgen akan memungkinkan Anda bercanda kode untuk membuat satu set antarmuka untuk paket tertentu. Untuk menghasilkan kode sumber:

 = mockget-source / mypkg / pkg.go 

Hal ini menciptakan model, tetapi Anda harus menempatkan model yang dihasilkan dalam kemasan yang benar ini .. alat menambahkan fitur tambahan untuk menegaskan bahwa metode dengan pengaturan yang benar dan dalam urutan yang benar dipanggil.

 gomock.InOrder (pkgObj.EXPECT (). SomeMethod (1, "pertama"), pkgObj. .. WAIT () SomeMethod (2, "kedua"), pkgObj.EXPECT () SomeMethod (3 , "ketiga")) 

Anda dapat membaca tentang rincian paket: https: // kode. google.com/p/gomock /

3 Partai & amp; amp; amp; Standar perpustakaan mengejek

Untuk menguji efisiensi, kita harus dapat dengan cepat mock perpustakaan yang kita gunakan secara langsung. Contoh mengejek bersandar pada interface daripada struktur. Tapi apa yang terjadi jika perpustakaan pihak ke-3 yang Anda gunakan tidak menggunakan antarmuka dan kembali struct konkret untuk kode Anda? Salah satu kemungkinan adalah untuk membungkus kode mereka di interface, tetapi bisa memakan waktu yang lama dan menciptakan lebih banyak masalah. Kemungkinan lain adalah dengan menggunakan “withmock” perpustakaan: https://github.com/qur/withmock. Untuk membuat menyenangkan dari perpustakaan, Anda menambahkan komentar “// Model” pada akhir impor:

 Impor ( "fmt" "tulang" "tulang / exec" "example.com / beberapa / eksternal / paket "// Mock) 

ini akan lakukan adalah mengatakan” withmock “mengolok-olok untuk membuat:

" example.com/some/external/package "

bagian” dari withmock “menciptakan mengolok-olok, namun berdasarkan kerangka gomock (https://code.google.com/p/gomock/) untuk menginisialisasi pseudo-kode dalam. Sekarang Anda dapat mengkonfigurasi paket eksternal mengejek Anda.

 // ext konfigurasi paket ext.MOCK Mock () setcontroller (ctrl) 

ini diinisialisasi model dan memungkinkan Anda untuk mengobati harapan didirikan dan mengklaim mereka disebut : ..

 // kita mengharapkan untuk melihat metode mobile bernama, dan kami ingin kembali ext.EXPECT benar () metode sel () kembali (benar) 

Anda bisa Pelajari lebih lanjut tentang masing-masing paket baca di bawah ini: https://code.google.com/p/gomock/ dan https://github.com/qur/withmock

kerangka tes

Seperti kita mengolok-olok dan berpotensi untuk perangkat pengujian, akan menyenangkan untuk memiliki untuk menghancurkan beberapa cara dan harus di-download untuk membangun perangkat untuk setiap tes. Selain itu, Go tidak datang dengan tuduhan. Hal ini karena pengembang digunakan sebagai kruk dalam kode yang sebenarnya, tetapi mereka melayani tujuan yang baik dalam kode uji. The Gocheck perpustakaan menawarkan persis fungsi semacam ini. Ada kerangka lain yang tersedia, tetapi mereka harus menggunakan biner mereka sendiri, bukan standar “pergi test”. Ini adalah masalah-matic karena semua alat kami biarkan “pergi test” sebagai dasar untuk penggunaan. Gocheck Framework menyediakan akses ke panggilan berikut

  • func (s * Type Suite) Setup (c * C) -. dieksekusi bahkan jika urutan dimulai
  • func (s * Jenis Lanjutan) Uji Setup (c * C) -. Run Run sebelum setiap tes atau referensi dimulai
  • func (s * Type Suite) TearDownTest (c * C) – Jalankan setelah setiap tes atau referensi ras
  • func (s * Type Suite) TearDownSuite (c * C) -. Jalankan sekali setelah semua tes atau kriteria

Selain itu, perpustakaan selesai Anda Gocheck tuduhan tes untuk besar:

 c.Assert (nilai Egale, 42) c. menegaskan (s permainan, "hel. * itu") c.Assert (err, IsNil) c.Assert (foo, Equal, Bar, Commentf ( "CPU == #% d", runtime.NumCPU ())} 

Anda dapat mempelajari lebih lanjut di sini Gocheck: http://labix.org/gocheck

laporan cakupan kode

adalah ukuran penting bahwa kita mengukur ketika kita mengembangkan kode baru Sosialisasi laporan cakupan ini, kita tahu betapa pentingnya tujuan kami, kami memang, kami yakin: .. “gagal Anda melihat” Dan. meskipun cakupan kode tidak selalu bagaimana dan kode diuji tidak berarti bahwa ukuran ini sama sekali, bahwa kita akan cenderung untuk lulus cakupan yang luas Gocov (https: /. . /github.com/axw/gocov) Link sempurna dengan tes yang ada gocov untuk menginstal, cukup gunakan perintah tradisional “mengambil”: pergi mendapatkan github.com/axw/gocov/gocov Anda dapat menempatkan pesanan gocov pesanan Anda sebagai “pergi test” dalam rangka.

 gocov tes ./...

ini akan menampilkan laporan JSON melaporkan kepada Anda dengan pipa hasil kepada wartawan

 gocov test / .... | Laporan gocov 
 github.com/imosquera/uploadthis/conf/conf.go ParseOpts 100.00% (6/6) github.com/imosquera/uploadthis/conf/conf.go @ 49: 18 0.00 % (0/9) --------- github.com/imosquera/uploadthis/conf 40.00% (6/15) 

Hal ini tidak bagi Anda untuk mengetahui apa yang garis tidak dibahas adalah bahwa Anda memiliki ide, perlu metode kerja. metode “gocov membubuhi keterangan” garis menunjukkan yang tidak tercakup, tetapi membutuhkan sedikit kerja lagi.

Visual Lihat kode Coverage

 mampu melihat, garis visual cakupan tes penting untuk mengetahui di mana tes kegagalan Anda untuk menutupi. Gocov-html (https://github.com/matm/gocov-html) mengambil output dari alat gocov dan menciptakan HTML sederhana yang menunjukkan persis di mana kita menutupi hilang. Alih-alih berfokus pada hasil pipa uji laporan gocov Anda dapat menggunakan alat gocov html:

& amp; amp; nbsp;

gocov Uji / … |. gocov-html & amp; amp; gt; index.html

& amp; amp; nbsp;

Kami berharap ujian tes ini lebih baik membantu Anda Go. Ini masih bahasa yang relatif baru dan hal-hal berubah dengan cepat. Jika Anda berpikir itu adalah alat tes saat ini kita hadapi, mari kita tahu di komentar. Juga, inilah video untuk hari demonstrasi mingguan kami untuk mendiskusikan alat pengujian yang dijelaskan di atas

& amp; amp; nbsp;

Drama Korea kode

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>