Adakah yang berhasil menghasilkan cakupan kode untuk pengujian unit Go? Saya tidak dapat menemukan alat untuk itu di web.
Adakah yang berhasil menghasilkan cakupan kode untuk pengujian unit Go? Saya tidak dapat menemukan alat untuk itu di web.
Jawaban:
Perhatikan bahwa Go 1.2 (Q4 2013, rc1 tersedia) sekarang akan menampilkan hasil cakupan pengujian :
Salah satu fitur baru yang utama
go test
adalah bahwa ia sekarang dapat menghitung dan, dengan bantuan darigo tool cover
program " " baru yang dipasang secara terpisah , menampilkan hasil cakupan pengujian .The
cover
alat merupakan bagian darigo.tools
subrepository . Itu dapat diinstal dengan menjalankan
$ go get golang.org/x/tools/cmd/cover
Alat penutup melakukan dua hal.
- Pertama, ketika
go test
diberi-cover
bendera, " " dijalankan secara otomatis untuk menulis ulang sumber paket dan menyisipkan pernyataan instrumentasi. Tes ini kemudian disusun dan dijalankan seperti biasa, dan statistik cakupan dasar dilaporkan:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
Kedua, untuk laporan yang lebih mendetail, tanda yang berbeda untuk "uji coba" dapat membuat file profil cakupan, yang
go tool cover
kemudian dapat dianalisis oleh program sampul, yang dipanggil dengan " ".
Versi terbaru Go (2013/09/19) menggunakan:
go test -coverprofile <filename> <package name>
Rincian tentang cara menghasilkan dan menganalisis statistik cakupan dapat ditemukan dengan menjalankan perintah
$ go help testflag
$ go tool cover -help
Ivan Black menyebutkan di komentarnya :
go test -coverprofile cover.out
dan kemudian
go tool cover -html=cover.out
terbukacover.out
di browser default Anda
Saya bahkan tidak ingin menunggu browser dibuka, jadi saya mendefinisikan alias ini:
alias gc=grep -v -e " 1$" cover.out
Bahwa saya hanya mengetik gc
, dan memiliki daftar semua garis tidak belum dibahas (di sini: dengan coverage.out
garis tidak berakhir dengan " 1
").
go test -coverprofile cover.out
dan kemudian go tool cover -html=cover.out -o cover.html
buka cover.html
di browser
go tool cover -html=cover.out
akan secara otomatis membuka browser, tetapi tidak berfungsi untuk sistem saya. Saya lebih memilih untuk tetap membuka browser dan menyegarkan halaman jika perlu.
Go hadir dengan alat yang luar biasa untuk pengujian dan cakupan. Meskipun semua alat Go terdokumentasi dengan baik, go tool cover -help
saya sarankan membaca artikel cerita sampul di blog resmi Go . Ini memiliki banyak contoh dan saya sangat merekomendasikannya!
Saya memiliki fungsi ini di ~ / .bash_profile saya. (Anda bisa menempelkannya di terminal untuk mencobanya).
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
Kemudian cd
masuk ke folder go project / package dan ketik cover
. Ini membuka alat visual di browser yang menunjukkan kepada Anda kode yang diuji dan belum diuji untuk setiap file dalam paket saat ini. Perintah yang sangat berguna! Saya sangat merekomendasikannya untuk menemukan apa yang belum 100% diuji! Hasil yang ditampilkan adalah per file. Dari drop-down di kiri atas, Anda dapat melihat hasil untuk semua file.
Dengan perintah ini Anda juga dapat memeriksa cakupan paket apa pun, misalnya:
cover fmt
Output di terminal dari perintah ini adalah:
ok fmt 0.031s coverage: 91.9% of statements
Selain itu di browser Anda, Anda akan melihat alat ini menunjukkan semua baris kode berwarna merah yang tidak tercakup dalam tes:
Anda juga dapat menyimpan file cakupan html alih-alih membukanya di browser. Ini sangat berguna jika pengujian + cakupan Anda dijalankan oleh alat CI seperti Jenkins. Dengan begitu, Anda dapat menyajikan file cakupan dari server pusat dan seluruh tim akan dapat melihat hasil cakupan untuk setiap build.
Selain jawaban bagus di atas, saya menemukan tiga baris ini sebagai cara termudah untuk mendapatkannya (yang mencakup semua paket):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
Perhatikan bahwa di file HTML Anda akan menemukan tombol dropdown yang akan mengarahkan Anda ke semua file.
Ada di sini , beberapa dokumen di sini .
$ go tool
6a
6c
6g
6l
addr2line
api
cgo
cov
dist
ebnflint
fix
gotype
nm
objdump
pack
pprof
prof
vet
yacc
$ go tool cov -h
usage: cov [-lsv] [-g substring] [-m minlines] [6.out args...]
-g specifies pattern of interesting functions or files
go tool cov: exit status 1
$
Saya belum pernah menggunakannya, hanya ini yang saya tahu.
~/go/pkg/tool/linux_amd64
cocok dengan versi Go terakhir saya kemarin.
Jika Anda ingin melihat garis-garis yang tidak tercakup oleh fungsinya secara langsung di terminal, saya menulis ulang alat sampul untuk tujuan ini. Ini tersedia di https://github.com/gregoryv/uncover .
Pemakaian
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Screenshot
Jika Anda menggunakan VSCode , fungsionalitas ini didukung di luar kotak ( Tapi dinonaktifkan secara default )
Cukup aktifkan pengujian pada penyimpanan + pelaporan cakupan
https://github.com/microsoft/vscode-go/wiki/On-Save-features
Ini bahkan akan menunjukkan di editor Anda garis mana yang tidak tercakup yang sangat berguna.
Laporan Cakupan →
a) Jalankan semua tes dan aktifkan cakupan -> go test ./... -coverprofile coverage.out
b) Dapatkan cakupan untuk fungsi individu serta cakupan keseluruhan → go tool cover -func coverage.out
c) Lihat garis yang tercakup dan yang tidak tercakup dalam pengujian Anda → go tool cover -html=cover.out -o coverage.html
. Buka coverage.html
file yang dibuat dengan ini di browser dan analisis info cakupan terperinci.
Cara cepat dan mudah adalah dengan menggunakan alat cakupan yang disertakan dengan fitur bawaan:
$ go test -coverprofile cp.out // Memberikan cakupan dalam satu persentase liner
Setelah Anda menjalankan perintah di atas, jika Anda ingin melihat secara visual cakupan kode (seperti pernyataan tertutup dan tidak terjawab dll)
$ go tool cover -html = cp.out
Catatan: Anda perlu menjalankan perintah di atas di folder tempat Anda ingin melihat cakupan
Coba gunakan Gambar Docker gaia-docker / base-go-build .
Ini adalah image Docker yang berisi semua yang Anda butuhkan untuk membangun dan menguji cakupan. Menjalankan cakupan pengujian di dalam container Docker membuat folder .cover dengan hasil cakupan pengujian project Anda.
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
The cakupan tes Script berjalan pada semua proyek folder dan menghasilkan, di dalam .cover folder JUnit dan cakupan laporan untuk setiap folder, dan laporan cakupan dari semua proyek menggabungkan tes.
Codecov juga menyarankan skrip yang mengumpulkan hasil cakupan: banyak file
Cakupan Tes untuk Golang
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
Periksa Sudah Dipasang dengan Benar Dan Anda memiliki akses dari Terminal Anda
Jalankan Test Case
Jika Anda menjalankan uji kasus itu akan Reder File .json Berdasarkan file Anda akan mendapatkan Laporan Cakupan Kode dalam file .html
gocov test >your_Coverage_report.json
Setelah Test case Anda selesai Buat Laporan dalam File .html menggunakan .json
gocov-html your_Coverage_report.json >your_Coverage_report.html
Referensi
Alat Cakupan GoTest untuk go lang
Metode Alternatif
Pergi cakupan Tes Asli
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>