มีใครบ้างที่ประสบความสำเร็จในการสร้างความครอบคลุมของรหัสสำหรับการทดสอบหน่วย Go? ฉันไม่พบเครื่องมือสำหรับสิ่งนั้นบนเว็บ
มีใครบ้างที่ประสบความสำเร็จในการสร้างความครอบคลุมของรหัสสำหรับการทดสอบหน่วย Go? ฉันไม่พบเครื่องมือสำหรับสิ่งนั้นบนเว็บ
คำตอบ:
โปรดทราบว่าGo 1.2 (Q4 2013, rc1 พร้อมใช้งาน)จะแสดงผลการทดสอบ :
หนึ่งคุณลักษณะใหม่ที่สำคัญของ
go test
คือว่าตอนนี้มันสามารถคำนวณและด้วยความช่วยเหลือจากใหม่ติดตั้งแยกต่างหาก "go tool cover
" โปรแกรมการทดสอบการแสดงผลผลการคุ้มครอง
cover
เครื่องมือที่เป็นส่วนหนึ่งของsubrepositorygo.tools
สามารถติดตั้งได้โดยการรัน
$ go get golang.org/x/tools/cmd/cover
เครื่องมือปกทำสองสิ่ง
- ขั้นแรกเมื่อ
go test
กำหนด-cover
ค่าสถานะ" " ระบบจะรันโดยอัตโนมัติเพื่อเขียนซอร์สสำหรับแพ็กเกจและแทรกคำสั่งเครื่องมือวัด จากนั้นการทดสอบจะถูกรวบรวมและดำเนินการตามปกติและมีการรายงานสถิติความครอบคลุมพื้นฐาน:
$ go test -coverprofile fmtcoverage.html fmt
ok fmt 0.060s coverage: 91.4% of statements
$
ประการที่สองสำหรับรายงานที่มีรายละเอียดมากขึ้นแฟล็กต่างๆในการ "ไปทดสอบ" สามารถสร้างไฟล์โปรไฟล์ความครอบคลุมซึ่งโปรแกรมหน้าปกเรียกใช้ด้วย "
go tool cover
" จากนั้นสามารถวิเคราะห์ได้
เวอร์ชันล่าสุดของ Go (2013/09/19) ใช้:
go test -coverprofile <filename> <package name>
สามารถดูรายละเอียดเกี่ยวกับวิธีการสร้างและวิเคราะห์สถิติความครอบคลุมได้โดยการรันคำสั่ง
$ go help testflag
$ go tool cover -help
Ivan Blackกล่าวถึงในความคิดเห็น :
go test -coverprofile cover.out
จากนั้น
go tool cover -html=cover.out
เปิดcover.out
ในเบราว์เซอร์เริ่มต้นของคุณ
ฉันไม่ต้องการรอให้เบราว์เซอร์เปิดดังนั้นฉันจึงกำหนดนามแฝงนี้:
alias gc=grep -v -e " 1$" cover.out
ที่ฉันเพิ่งพิมพ์gc
และมีรายการบรรทัดทั้งหมดที่ยังไม่ครอบคลุม (ที่นี่: มีcoverage.out
บรรทัดที่ไม่ได้ลงท้ายด้วย " 1
")
go test -coverprofile cover.out
แล้วgo tool cover -html=cover.out -o cover.html
เปิดcover.html
ในเบราว์เซอร์
go tool cover -html=cover.out
จะเปิดเบราว์เซอร์โดยอัตโนมัติ แต่ใช้ไม่ได้กับระบบของฉัน ฉันชอบเปิดเบราว์เซอร์ค้างไว้และรีเฟรชหน้าหากจำเป็น
Go มาพร้อมกับเครื่องมือที่ยอดเยี่ยมสำหรับการทดสอบและการครอบคลุม แม้ว่าเครื่องมือทั้งหมดที่ไปมีเอกสารดีgo tool cover -help
ฉันขอแนะนำให้อ่านบทความเรื่องปกในบล็อกไปอย่างเป็นทางการ มีตัวอย่างมากมายและฉันขอแนะนำอย่างยิ่ง!
ฉันมีฟังก์ชันนี้ใน ~ / .bash_profile ของฉัน (คุณสามารถวางลงในเทอร์มินัลเพื่อทดลองใช้)
cover () {
t="/tmp/go-cover.$$.tmp"
go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}
แล้วก็cd
เป็นโครงการไปโฟลเดอร์ / cover
แพคเกจและประเภท สิ่งนี้จะเปิดเครื่องมือภาพในเบราว์เซอร์ซึ่งจะแสดงรหัสที่ทดสอบและยังไม่ทดสอบสำหรับแต่ละไฟล์ในแพ็คเกจปัจจุบัน คำสั่งที่มีประโยชน์มาก! ฉันขอแนะนำอย่างยิ่งสำหรับการค้นหาสิ่งที่ยังไม่ผ่านการทดสอบ 100%! ผลลัพธ์ที่แสดงเป็นต่อไฟล์ จากเมนูแบบเลื่อนลงด้านซ้ายบนคุณจะเห็นผลลัพธ์สำหรับไฟล์ทั้งหมด
ด้วยคำสั่งนี้คุณสามารถตรวจสอบความครอบคลุมของแพ็คเกจใด ๆ ได้เช่น:
cover fmt
ผลลัพธ์ในเทอร์มินัลจากคำสั่งนี้จะเป็น:
ok fmt 0.031s coverage: 91.9% of statements
นอกจากนั้นในเบราว์เซอร์ของคุณคุณจะเห็นเครื่องมือนี้แสดงเป็นสีแดงทุกบรรทัดของโค้ดซึ่งไม่ครอบคลุมถึงการทดสอบ:
นอกจากนี้ยังสามารถบันทึกไฟล์ครอบคลุม html แทนการเปิดในเบราว์เซอร์ สิ่งนี้มีประโยชน์มากในกรณีที่การทดสอบ + ความครอบคลุมของคุณดำเนินการโดยเครื่องมือ CI เช่น Jenkins ด้วยวิธีนี้คุณสามารถให้บริการไฟล์ความครอบคลุมจากเซิร์ฟเวอร์ส่วนกลางและทั้งทีมจะสามารถดูผลลัพธ์การครอบคลุมสำหรับแต่ละบิลด์ได้
นอกจากคำตอบที่ดีข้างต้นแล้วฉันพบว่าทั้งสามบรรทัดนี้เป็นวิธีที่ง่ายที่สุดในการรับมัน (ซึ่งรวมถึงแพ็คเกจทั้งหมด):
go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html
โปรดทราบว่าในไฟล์ HTML คุณจะพบปุ่มดรอปดาวน์ที่จะนำคุณไปยังไฟล์ทั้งหมด
มันอยู่ที่นี่เอกสารบางอย่างที่นี่
$ 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
$
ฉันไม่ได้ใช้มันนี่คือทั้งหมดที่ฉันรู้
~/go/pkg/tool/linux_amd64
ตรงกับรุ่น Go ล่าสุดของเมื่อวานนี้
หากคุณใช้VSCodeฟังก์ชันนี้ได้รับการสนับสนุนนอกกรอบ ( แต่ปิดใช้งานโดยค่าเริ่มต้น )
เพียงเปิดการทดสอบในการบันทึก + การรายงานความครอบคลุม
https://github.com/microsoft/vscode-go/wiki/On-Save-features
มันจะแสดงในตัวแก้ไขของคุณว่าไม่ครอบคลุมบรรทัดใดซึ่งสะดวกมาก
รายงานความครอบคลุม→
a) ทำการทดสอบทั้งหมดและเปิดใช้งานการครอบคลุม -> go test ./... -coverprofile coverage.out
b) รับความครอบคลุมสำหรับแต่ละฟังก์ชั่นรวมถึงความครอบคลุมโดยรวม→ go tool cover -func coverage.out
c) go tool cover -html=cover.out -o coverage.html
ดูสายที่ครอบคลุมและคนที่ไม่ได้รับการคุ้มครองโดยการทดสอบของคุณ→ เปิดcoverage.html
ไฟล์ที่สร้างขึ้นในเบราว์เซอร์และวิเคราะห์ข้อมูลความครอบคลุมโดยละเอียด
วิธีที่ง่ายและรวดเร็วคือใช้เครื่องมือครอบคลุมที่มาพร้อมกับการเดินทางในตัว:
$ go test -coverprofile cp.out // ปล่อยความครอบคลุมในเปอร์เซ็นต์ซับเดียวอย่างชาญฉลาด
หลังจากที่คุณดำเนินการคำสั่งข้างต้นแล้วหากคุณต้องการดูความครอบคลุมของรหัสด้วยสายตา (เช่นข้อความที่ครอบคลุมและพลาด ฯลฯ )
ปกเครื่องมือ $ go -html = cp.out
หมายเหตุ: คุณต้องดำเนินการตามคำสั่งข้างต้นในโฟลเดอร์ที่คุณต้องการดูความครอบคลุม
แรงบันดาลใจจากเมนูความช่วยเหลือและคำตอบอื่น ๆ สำหรับคำถามนี้เพียงเรียกใช้:
f=cover.out; if [ -f $f ]; then rm $f; fi; go test ./... -coverprofile $f && \
go tool cover -html $f && \
rm $f
ลองใช้gaia-docker / base-go-build Docker Image
นี่คืออิมเมจ Docker ที่มีทั้งหมดที่คุณต้องการเพื่อสร้างและทดสอบการครอบคลุม การเรียกใช้ความครอบคลุมการทดสอบภายในคอนเทนเนอร์ Docker จะสร้างโฟลเดอร์. coverพร้อมผลการทดสอบความครอบคลุมของโครงการของคุณ
docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh
สคริปต์ครอบคลุมการทดสอบที่ทำงานบนโฟลเดอร์ทุกโครงการและสร้างภายใน.coverโฟลเดอร์ junit และความคุ้มครองรายงานสำหรับแต่ละโฟลเดอร์และรวมรายงานความคุ้มครองของทุกโครงการการทดสอบ
Codecov ยังแนะนำสคริปต์ที่รวบรวมผลการครอบคลุม: ไฟล์หลายไฟล์
ครอบคลุมการทดสอบสำหรับ Golang
go get github.com/axw/gocov/gocov
go get -u gopkg.in/matm/v1/gocov-html
ตรวจสอบว่าติดตั้งอย่างถูกต้องและคุณสามารถเข้าถึงได้จาก Terminal ของคุณ
เรียกใช้กรณีทดสอบ
หากคุณเรียกใช้กรณีทดสอบมันจะทำให้ไฟล์. json ใหม่ขึ้นตามไฟล์คุณจะได้รับ Code Coverage Report ในไฟล์. html
gocov test >your_Coverage_report.json
เมื่อกรณีการทดสอบของคุณเสร็จสิ้นสร้างรายงานในไฟล์. html โดยใช้. json
gocov-html your_Coverage_report.json >your_Coverage_report.html
ข้อมูลอ้างอิง
GoTest Coverage Tool สำหรับ go lang
วิธีอื่น
ไปครอบคลุมการทดสอบพื้นเมือง
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
go test -coverprofile <filename> <package name>