Có ai đã thành công trong việc tạo vùng phủ mã cho các bài kiểm tra đơn vị Go không? Tôi không thể tìm thấy một công cụ nào cho việc đó trên web.
Có ai đã thành công trong việc tạo vùng phủ mã cho các bài kiểm tra đơn vị Go không? Tôi không thể tìm thấy một công cụ nào cho việc đó trên web.
Câu trả lời:
Lưu ý rằng Go 1.2 (Q4 2013, rc1 khả dụng) bây giờ sẽ hiển thị kết quả kiểm tra phạm vi :
Một tính năng mới chính
go test
là giờ đây nó có thể tính toán và với sự trợ giúp từ mộtgo tool cover
chương trình "" mới được cài đặt riêng , hiển thị kết quả kiểm tra phạm vi .Công
cover
cụ này là một phần củago.tools
kho lưu trữ con . Nó có thể được cài đặt bằng cách chạy
$ go get golang.org/x/tools/cmd/cover
Công cụ bìa thực hiện hai điều.
- Đầu tiên, khi "
go test
" được-cover
gắn cờ, nó sẽ tự động chạy để viết lại nguồn cho gói và chèn các câu lệnh thiết bị. Sau đó, thử nghiệm được biên dịch và chạy như bình thường, và các số liệu thống kê cơ bản về phạm vi được báo cáo:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
Thứ hai, đối với các báo cáo chi tiết hơn, các cờ khác nhau để "đi kiểm tra" có thể tạo tệp hồ sơ phạm vi, mà chương trình bao gồm, được gọi bằng "
go tool cover
", sau đó có thể phân tích.
Các phiên bản mới nhất của Go (2013/09/19) sử dụng:
go test -coverprofile <filename> <package name>
Bạn có thể tìm thấy chi tiết về cách tạo và phân tích thống kê vùng phủ bằng cách chạy các lệnh
$ go help testflag
$ go tool cover -help
Ivan Black đề cập trong các bình luận :
go test -coverprofile cover.out
và sau đó
go tool cover -html=cover.out
mởcover.out
trong trình duyệt mặc định của bạn
Tôi thậm chí không muốn đợi trình duyệt mở, vì vậy tôi đã định nghĩa bí danh này:
alias gc=grep -v -e " 1$" cover.out
Mà tôi chỉ cần gõ gc
, và có một danh sách của tất cả các dòng không chưa được điều chỉnh (ở đây: với một coverage.out
dòng không kết thúc bằng " 1
").
go test -coverprofile cover.out
và sau đó go tool cover -html=cover.out -o cover.html
mở cover.html
trong trình duyệt
go tool cover -html=cover.out
sẽ tự động mở một trình duyệt, nhưng nó không hoạt động với hệ thống của tôi. Tôi muốn mở trình duyệt và làm mới trang nếu cần.
Go đi kèm với công cụ tuyệt vời để kiểm tra và bảo hiểm. Mặc dù tất cả các công cụ go tool cover -help
cờ vây đều được ghi chép đầy đủ, tôi khuyên bạn nên đọc bài viết Câu chuyện trang bìa trên blog cờ vây chính thức . Nó có rất nhiều ví dụ và tôi thực sự khuyên bạn nên sử dụng nó!
Tôi có hàm này trong ~ / .bash_profile của mình. (bạn có thể chỉ cần dán nó vào thiết bị đầu cuối để thử).
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
Sau đó, chỉ cần cd
vào một thư mục dự án / gói và nhập cover
. Thao tác này sẽ mở ra một công cụ trực quan trong trình duyệt, hiển thị cho bạn mã đã được kiểm tra và chưa được kiểm tra cho mỗi tệp trong gói hiện tại. Lệnh rất hữu ích! Tôi thực sự khuyên bạn nên sử dụng nó để tìm những gì chưa được kiểm tra 100%! Kết quả hiển thị là trên mỗi tệp. Từ menu thả xuống ở trên cùng bên trái, bạn có thể xem kết quả cho tất cả các tệp.
Với lệnh này, bạn cũng có thể kiểm tra phạm vi của bất kỳ gói nào, ví dụ:
cover fmt
Đầu ra trong terminal từ lệnh này sẽ là:
ok fmt 0.031s coverage: 91.9% of statements
Ngoài ra, trong trình duyệt của bạn, bạn sẽ thấy công cụ này hiển thị bằng màu đỏ tất cả các dòng mã không được kiểm tra:
Cũng có thể chỉ lưu tệp tin html thay vì mở nó trong trình duyệt. Điều này rất hữu ích trong trường hợp khi các bài kiểm tra + phạm vi bảo hiểm của bạn được chạy bằng công cụ CI như Jenkins. Bằng cách đó, bạn có thể phân phát các tệp phạm vi từ một máy chủ trung tâm và cả nhóm sẽ có thể xem kết quả về phạm vi cho mỗi bản dựng.
Ngoài các câu trả lời hay ở trên, tôi thấy ba dòng này là cách đơn giản nhất để lấy nó (bao gồm tất cả các gói):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
Lưu ý rằng trong tệp HTML, bạn sẽ tìm thấy một nút thả xuống sẽ hướng bạn đến tất cả các tệp.
Nó ở ngay đây , một số tài liệu ở đây .
$ 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
$
Tôi chưa sử dụng nó, đây là tất cả những gì tôi biết.
~/go/pkg/tool/linux_amd64
dựng Go cuối cùng của tôi vào ngày hôm qua.
Nếu bạn muốn xem các dòng không được che theo chức năng trực tiếp trong một thiết bị đầu cuối, tôi đã viết lại công cụ che cho mục đích này. Nó có sẵn tại https://github.com/gregoryv/uncover .
Sử dụng
go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out
Ảnh chụp màn hình
Nếu bạn đang sử dụng VSCode , chức năng này được hỗ trợ ngoài hộp ( Nhưng bị tắt theo mặc định )
Chỉ cần bật kiểm tra trên lưu + báo cáo mức độ phù hợp
https://github.com/microsoft/vscode-go/wiki/On-Save-features
Nó thậm chí sẽ hiển thị trong trình soạn thảo của bạn những dòng nào không bị che, rất tiện dụng.
Báo cáo phạm vi & rarr;
a) Chạy tất cả các thử nghiệm và kích hoạt phạm vi bảo hiểm -> go test ./... -coverprofile coverage.out
b) Nhận phạm vi bảo hiểm cho các chức năng riêng lẻ cũng như phạm vi bảo hiểm tổng thể → go tool cover -func coverage.out
c) Xem những dòng được đề cập và những dòng không được kiểm tra của bạn → go tool cover -html=cover.out -o coverage.html
. Mở coverage.html
tệp được tạo trong trình duyệt và phân tích thông tin chi tiết về phạm vi bảo hiểm.
Một cách nhanh chóng và dễ dàng là sử dụng công cụ phủ sóng đi kèm với go tích hợp:
$ go test -coverprofile cp.out // Phát ra phạm vi bảo hiểm theo một tỷ lệ phần trăm lót khôn ngoan
Sau khi bạn thực hiện lệnh trên, nếu bạn muốn xem trực quan phạm vi của mã (như các câu lệnh được đề cập và bị mất, v.v.)
$ go tool cover -html = cp.out
Lưu ý: Bạn cần thực hiện các lệnh trên trong thư mục mà bạn muốn xem phạm vi
Hãy thử sử dụng Hình ảnh Docker của gaia-docker / base-go-build .
Đây là hình ảnh Docker chứa tất cả những gì bạn cần để xây dựng và kiểm tra mức độ phù hợp. Chạy thử nghiệm phạm vi bên trong một vùng chứa Docker tạo thư mục .cover với kết quả kiểm tra phạm vi dự án của bạn.
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
Tập lệnh kiểm tra phạm vi hoạt động trên tất cả các thư mục của dự án và tạo, bên trong thư mục .cover báo cáo phạm vi và báo cáo cho từng thư mục, và báo cáo kết hợp về phạm vi thử nghiệm của tất cả các dự án.
Codecov cũng đề xuất một tập lệnh thu thập kết quả phù hợp: nhiều tệp
Kiểm tra phạm vi bảo hiểm cho Golang
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
Kiểm tra xem nó đã được cài đặt đúng chưa và bạn có quyền truy cập từ thiết bị đầu cuối của mình
Chạy trường hợp thử nghiệm
Nếu bạn chạy trường hợp thử nghiệm, nó sẽ làm đỏ tệp .json Dựa trên tệp, bạn sẽ nhận được Báo cáo phạm vi mã trong tệp .html
gocov test >your_Coverage_report.json
Khi Trường hợp kiểm tra của bạn được thực hiện xong Tạo Báo cáo trong tệp .html bằng cách sử dụng .json
gocov-html your_Coverage_report.json >your_Coverage_report.html
Tài liệu tham khảo
GoTest Coverage Tool cho go lang
Đi tới Công cụ Báo cáo Kiểm tra
Phương pháp luân phiên
Phạm vi thử nghiệm gốc
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>