Czy komuś udało się wygenerować pokrycie kodu dla testów jednostkowych Go? Nie mogę znaleźć odpowiedniego narzędzia w sieci.
Czy komuś udało się wygenerować pokrycie kodu dla testów jednostkowych Go? Nie mogę znaleźć odpowiedniego narzędzia w sieci.
Odpowiedzi:
Zwróć uwagę, że Go 1.2 (Q4 2013, rc1 jest dostępne) wyświetli teraz wyniki pokrycia testowego :
Jedną z głównych nowych funkcji programu
go test
jest to, że może teraz obliczać i, z pomocą nowego, oddzielnie zainstalowanegogo tool cover
programu, " " wyświetlać wyniki pokrycia testów .
cover
Narzędzie jest częściągo.tools
subrepository . Można go zainstalować, uruchamiając
$ go get golang.org/x/tools/cmd/cover
Narzędzie do okładek ma dwie rzeczy.
- Po pierwsze, kiedy „
go test
” otrzyma-cover
flagę, jest uruchamiane automatycznie w celu przepisania źródła pakietu i wstawienia instrukcji instrumentacji. Następnie test jest kompilowany i uruchamiany w zwykły sposób oraz raportowane są podstawowe statystyki pokrycia:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
Po drugie, w celu uzyskania bardziej szczegółowych raportów, różne flagi do „testu przejścia” mogą tworzyć plik profilu pokrycia, który program pokrycia, wywoływany za pomocą „
go tool cover
”, może następnie przeanalizować.
Najnowsze wersje Go (2013/09/19) wykorzystują:
go test -coverprofile <filename> <package name>
Szczegółowe informacje na temat generowania i analizowania statystyk pokrycia można znaleźć, uruchamiając polecenia
$ go help testflag
$ go tool cover -help
Ivan Black w komentarzach wspomina :
go test -coverprofile cover.out
a następnie
go tool cover -html=cover.out
otwiera sięcover.out
w domyślnej przeglądarce
Nie chcę nawet czekać na otwarcie przeglądarki, więc zdefiniowałem ten alias:
alias gc=grep -v -e " 1$" cover.out
Że po prostu piszę gc
i mam listę wszystkich linii, które jeszcze nie zostały omówione (tutaj: z coverage.out
linią nie kończącą się na „ 1
”).
go test -coverprofile cover.out
a następnie go tool cover -html=cover.out -o cover.html
otwórz cover.html
w przeglądarce
go tool cover -html=cover.out
automatycznie otworzy przeglądarkę, ale nie działa w moim systemie. Wolę mieć otwartą przeglądarkę i w razie potrzeby odświeżyć stronę.
Go zawiera niesamowite narzędzie do testowania i pokrycia. Chociaż wszystkie narzędzia Go są dobrze udokumentowane go tool cover -help
, proponuję przeczytać artykuł z okładki na oficjalnym blogu Go . Ma mnóstwo przykładów i gorąco go polecam!
Mam tę funkcję w moim ~ / .bash_profile. (możesz po prostu wkleić go do terminala, aby spróbować).
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
Następnie po prostu cd
do folderu projektu / pakietu go i wpisz cover
. Otwiera to wizualne narzędzie w przeglądarce, które pokazuje przetestowany i nieprzetestowany kod dla każdego pliku w bieżącym pakiecie. Bardzo przydatne polecenie! Zdecydowanie polecam do znalezienia czegoś, co nie jest jeszcze w 100% przetestowane! Wyświetlane wyniki są według pliku. Z listy rozwijanej w lewym górnym rogu możesz zobaczyć wyniki dla wszystkich plików.
Za pomocą tego polecenia możesz również sprawdzić pokrycie dowolnego pakietu, na przykład:
cover fmt
Dane wyjściowe w terminalu z tego polecenia byłyby:
ok fmt 0.031s coverage: 91.9% of statements
Oprócz tego w przeglądarce zobaczysz to narzędzie pokazujące na czerwono wszystkie linie kodu, które nie są objęte testami:
Możliwe jest również zapisanie pliku pokrycia html zamiast otwierania go w przeglądarce. Jest to bardzo przydatne w przypadkach, gdy testy + pokrycie są uruchamiane przez narzędzie CI, takie jak Jenkins. W ten sposób możesz obsługiwać pliki pokrycia z centralnego serwera, a cały zespół będzie mógł zobaczyć wyniki pokrycia dla każdej kompilacji.
Oprócz dobrych odpowiedzi powyżej, uważam, że te trzy wiersze są najprostszym sposobem na uzyskanie tego (co obejmuje wszystkie pakiety):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
Zwróć uwagę, że w pliku HTML znajduje się przycisk rozwijany, który przekieruje Cię do wszystkich plików.
To prawda tutaj , niektóre docs tutaj .
$ 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
$
Nie użyłem tego, to wszystko, co wiem.
~/go/pkg/tool/linux_amd64
meczach mojej ostatniej wczorajszej kompilacji Go.
Jeśli chcesz zobaczyć odsłonięte linie według funkcji bezpośrednio w terminalu, przepisałem w tym celu narzędzie okładki. Jest dostępny pod adresem https://github.com/gregoryv/uncover .
Stosowanie
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Zrzut ekranu
Jeśli używasz VSCode, ta funkcja jest obsługiwana po wyjęciu z pudełka ( ale domyślnie wyłączona )
Po prostu włącz test na zapisywanie + raportowanie pokrycia
https://github.com/microsoft/vscode-go/wiki/On-Save-features
Pokaże nawet w twoim edytorze, które linie nie są zakryte, co jest bardzo przydatne.
Raport pokrycia →
a) Uruchom wszystkie testy i włącz pokrycie -> go test ./... -coverprofile coverage.out
b) Uzyskaj zasięg dla poszczególnych funkcji, a także ogólny zasięg → go tool cover -func coverage.out
c) Zobacz omówione linie i te, które nie zostały objęte testami → go tool cover -html=cover.out -o coverage.html
. Otwórz coverage.html
wygenerowany plik w przeglądarce i przeanalizuj szczegółowe informacje o zasięgu.
Szybkim i łatwym sposobem jest użycie narzędzia pokrycia, które jest dostarczane z wbudowanym go:
$ go test -coverprofile cp.out // Emituje pokrycie w procentach jednej linijki
Po wykonaniu powyższego polecenia, jeśli chcesz wizualnie zobaczyć pokrycie kodu (takie jak pokryte instrukcje i pominięte itp.)
$ go tool cover -html = cp.out
Uwaga: powyższe polecenia musisz wykonać w folderze, w którym chcesz zobaczyć pokrycie
Spróbuj użyć obrazu platformy Docker gaia-docker / base-go-build .
To jest obraz Dockera, który zawiera wszystko, czego potrzebujesz do tworzenia i testowania pokrycia. Uruchomienie pokrycia testowego w kontenerze Docker tworzy folder .cover z wynikami pokrycia testowego projektu.
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
Skrypt pokrycia Test działa na wszystkich projektów foldery i generuje wewnątrz .Chronić folderu JUnit i zakres raportów dla każdego folderu i połączyć raport pokrycia wszystkich projektów testów.
Codecov sugeruje również skrypt, który zbiera wyniki pokrycia: wiele plików
Pokrycie testowe dla Golang
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
Sprawdź, czy jest poprawnie zainstalowany. Masz dostęp ze swojego terminala
Uruchom przypadek testowy
Jeśli uruchomisz przypadek testowy, poprawi on plik .json Na podstawie pliku otrzymasz Raport pokrycia kodu w pliku .html
gocov test >your_Coverage_report.json
Po zakończeniu testu wygeneruj raport w pliku .html za pomocą .json
gocov-html your_Coverage_report.json >your_Coverage_report.html
Odniesienie
Narzędzie pokrycia GoTest dla go lang
Narzędzie do raportowania testów Go
Metoda alternatywna
Przejdź do testu natywnego
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>