Go birim testleri için kod kapsamı oluşturmayı başaran var mı? İnternette bunun için bir araç bulamıyorum.
Go birim testleri için kod kapsamı oluşturmayı başaran var mı? İnternette bunun için bir araç bulamıyorum.
Yanıtlar:
O Not Go 1.2 (Q4 2013 rc1 mevcut) şimdi gösterecektir test kapsamı sonuçları :
Bir büyük yeni özellik
go test
olduğunu şimdi yeni, ayrı ayrı "yüklü yardımıyla, hesaplamak ve olabilirgo tool cover
" programı, ekran testi kapsama sonuçları .
cover
Aracı bir parçasıdırgo.tools
subrepository . Çalıştırılarak kurulabilir
$ go get golang.org/x/tools/cmd/cover
Kapak aracı iki şey yapar.
- İlk olarak, "
go test
"-cover
bayrağı verildiğinde , paket için kaynağı yeniden yazmak ve enstrümantasyon ifadelerini eklemek için otomatik olarak çalıştırılır. Test daha sonra derlenir ve her zamanki gibi çalıştırılır ve temel kapsam istatistikleri raporlanır:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
İkinci olarak, daha ayrıntılı raporlar için, "teste git" için farklı bayraklar, "" ile çağrılan kapak programının
go tool cover
daha sonra analiz edebileceği bir kapsam profili dosyası oluşturabilir .
Frank Shearar şunları söylüyor :
Go'nun (2013/09/19) en son sürümleri şunları kullanır:
go test -coverprofile <filename> <package name>
Kapsam istatistiklerinin nasıl oluşturulacağı ve analiz edileceğine ilişkin ayrıntılar, komutlar çalıştırılarak bulunabilir.
$ go help testflag
$ go tool cover -help
Ivan Black yorumlarda şöyle diyor :
go test -coverprofile cover.out
ve ardından varsayılan tarayıcınızda
go tool cover -html=cover.out
açılırcover.out
Tarayıcının açılmasını beklemek bile istemiyorum, bu yüzden bu takma adı tanımladım:
alias gc=grep -v -e " 1$" cover.out
Ben sadece yazın gc
ve tüm çizgilerin bir listesi var değil henüz kaplı (burada: bir ile coverage.out
çizgi değil "ile biten 1
").
go test -coverprofile cover.out
ve sonra tarayıcıda go tool cover -html=cover.out -o cover.html
açıncover.html
go tool cover -html=cover.out
otomatik olarak bir tarayıcı açar, ancak sistemim için çalışmaz. Bir tarayıcıyı açık tutmayı ve gerekirse sayfayı yenilemeyi tercih ederim.
Go, test etme ve kapsam için harika bir araçla birlikte gelir. Tüm Go araçları iyi bir şekilde belgelenmiş go tool cover -help
olsa da, resmi Go blogundaki kapak hikayesi makalesini okumanızı öneririm . Bol örnekleri var ve kesinlikle tavsiye ederim!
Bu işlevi ~ / .bash_profile dosyamda kullanıyorum. (denemek için terminale yapıştırmanız yeterlidir).
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
Sonra cd
bir go proje / paket klasörüne girin ve yazın cover
. Bu, tarayıcıda size geçerli paketteki her dosya için test edilmiş ve test edilmemiş kodu gösteren görsel bir araç açar. Çok kullanışlı komut! Henüz% 100 test edilmemiş olanı bulmanız için şiddetle tavsiye ederim! Gösterilen sonuçlar dosya başınadır. Sol üstteki açılır menüden tüm dosyalar için sonuçları görebilirsiniz.
Bu komutla herhangi bir paketin kapsamını da kontrol edebilirsiniz, örneğin:
cover fmt
Bu komutun terminaldeki çıkışı şöyle olacaktır:
ok fmt 0.031s coverage: 91.9% of statements
Buna ek olarak, tarayıcınızda bu aracın, testlerle kapsanmayan tüm kod satırlarını kırmızıyla gösterdiğini göreceksiniz:
Ayrıca html kapsama dosyasını bir tarayıcıda açmak yerine kaydetmek de mümkündür. Bu, testleriniz + kapsamınızın Jenkins gibi CI aracı tarafından çalıştırıldığı durumlarda çok kullanışlıdır. Bu şekilde, kapsama dosyalarını merkezi bir sunucudan sunabilirsiniz ve tüm ekip, her derleme için kapsam sonuçlarını görebilir.
Yukarıdaki iyi cevaplara ek olarak, bu üç satırı elde etmenin en basit yolu olarak görüyorum (tüm paketleri içerir):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
HTML dosyasında sizi tüm dosyalara yönlendirecek bir açılır düğme bulacağınızı unutmayın.
Bu doğru burada bazı dokümanlar, burada .
$ 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
$
Kullanmadım, tüm bildiğim bu.
~/go/pkg/tool/linux_amd64
, dünkü son Go yapımla eşleşiyor.
Açığa çıkarılan satırları işlevlerine göre doğrudan bir terminalde görmek isterseniz, bu amaçla kapak aracını yeniden yazdım. Https://github.com/gregoryv/uncover adresinde mevcuttur .
kullanım
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Ekran görüntüsü
VSCode kullanıyorsanız, bu işlev kutudan desteklenir ( Ancak varsayılan olarak devre dışıdır )
Kaydet + kapsam raporlamasında testi açmanız yeterli
https://github.com/microsoft/vscode-go/wiki/On-Save-features
Editörünüzde hangi satırların kapsanmadığını ve bu da süper kullanışlı olduğunu gösterecektir.
Kapsam Raporu →
a) Tüm testleri çalıştırın ve kapsamı etkinleştirin -> go test ./... -coverprofile coverage.out
b) Bireysel işlevler ve genel kapsam için kapsam alın → go tool cover -func coverage.out
c) Kapsanan ve testlerinizin kapsamadığı satırları görün → go tool cover -html=cover.out -o coverage.html
. coverage.html
Tarayıcıda burada oluşturulan dosyayı açın ve ayrıntılı kapsam bilgilerini analiz edin.
Hızlı ve kolay bir yol, yerleşik hareketle birlikte gelen kapsama aracını kullanmaktır:
$ go test -coverprofile cp.out // Kapsamı yüzde olarak tek satırda yayar
Yukarıdaki komutu uyguladıktan sonra, kod kapsamını görsel olarak görmek isterseniz (kapsanan ifadeler ve cevapsız vb.)
$ go araç kapağı -html = cp.out
Not: Kapsamı görmek istediğiniz klasörde yukarıdaki komutları uygulamanız gerekir.
Gaia-docker / base-go-build Docker Image kullanmayı deneyin .
Bu, kapsamı oluşturmak ve test etmek için ihtiyacınız olan her şeyi içeren bir Docker görüntüsüdür. Bir Docker kapsayıcısı içinde test kapsamı çalıştırmak, projenizin test kapsamı sonuçlarını içeren .cover klasörü oluşturur .
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
Test kapsamı komut tüm projeler üzerinde çalışan klasör ve içinde üretir üstü örtülmelidir her klasör için JUnit ve kapsama raporları klasör ve bir bütün projelerin kapsamı raporunu birleştirmek testlerinin.
Codecov, kapsam sonuçlarını toplayan bir komut dosyası da önerir: birden çok dosya
Golang için Test Kapsamı
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
Doğru Kurulduğunu Kontrol Edin ve Terminalinizden Erişiminiz Var
Test Durumunu Çalıştırın
Test senaryosunu çalıştırırsanız, .json Dosyasını Yeniden Düzenleyecektir Dosyaya bağlı olarak Kod Kapsamı Raporunu .html dosyasında alacaksınız.
gocov test >your_Coverage_report.json
Test olayınız tamamlandığında .html Dosyasında .json kullanarak bir Rapor Oluşturun
gocov-html your_Coverage_report.json >your_Coverage_report.html
Referans
Go lang için GoTest Kapsama Aracı
Alternatif Yöntem
Yerel Test kapsamına gidin
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>