[unit-testing] Golang에서 코드 커버리지를 측정하는 방법은 무엇입니까?

Go 단위 테스트를위한 코드 커버리지 생성에 성공한 사람이 있습니까? 웹에서 해당 도구를 찾을 수 없습니다.



답변

참고 로 이동 1.2 (Q4 2013, RC1을 사용할 수는) 이제 표시됩니다 테스트 커버리지 결과 :

의 새로운 주요 기능 중 하나 는 이제 계산할 수 있고 별도로 설치된 새로운 ” “프로그램의 도움으로 테스트 범위 결과를 표시 할 수go test 있다는 go tool cover 입니다.

cover도구는 go.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분석 할 수있는 커버리지 프로필 파일을 생성 할 수 있습니다 .

Frank Shearar 다음과 같이 언급합니다 .

최신 버전의 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는 테스트 및 적용을위한 멋진 도구와 함께 제공됩니다. 모든 Go 도구는 잘 문서화 되어 있지만 공식 Go 블로그에서 The cover story 기사를go tool cover -help 읽는 것이 좋습니다 . 많은 예제가 있으며 강력히 추천합니다!

이 기능은 ~ / .bash_profile에 있습니다. (단지 터미널에 붙여 넣어 사용해 볼 수 있습니다).

cover () {
    t="/tmp/go-cover.$$.tmp"
    go test -coverprofile=$t $@ && go tool cover -html=$t && unlink $t
}

그런 다음 cdgo 프로젝트 / 패키지 폴더에 cover. 그러면 현재 패키지의 각 파일에 대해 테스트되고 테스트되지 않은 코드를 보여주는 시각적 도구가 브라우저에 열립니다. 매우 유용한 명령! 아직 100 % 테스트되지 않은 것을 찾기 위해 강력히 추천합니다! 표시된 결과는 파일 당입니다. 왼쪽 상단의 드롭 다운에서 모든 파일에 대한 결과를 볼 수 있습니다.

이 명령을 사용하면 다음과 같은 패키지의 적용 범위를 확인할 수도 있습니다.

cover fmt

이 명령의 터미널 출력은 다음과 같습니다.

ok      fmt 0.031s  coverage: 91.9% of statements

브라우저에서이 도구가 테스트로 다루지 않은 모든 코드 줄이 빨간색으로 표시되는 것을 볼 수 있습니다.

여기에 이미지 설명 입력

브라우저에서 열지 않고 html 커버리지 파일을 저장하는 것도 가능합니다. Jenkins와 같은 CI 도구에서 테스트 + 커버리지를 실행할 때 매우 유용합니다. 이렇게하면 중앙 서버에서 커버리지 파일을 제공 할 수 있으며 전체 팀은 각 빌드의 커버리지 결과를 볼 수 있습니다.


답변

위의 좋은 답변 외에도 다음 세 줄이 (모든 패키지를 포함하는) 가장 간단한 방법이라는 것을 알았습니다.

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
$

나는 그것을 사용하지 않았습니다. 이것이 내가 아는 전부입니다.


답변

터미널에서 직접 기능별로 커버되지 않은 라인을보고 싶다면이 목적을 위해 커버 도구를 다시 작성했습니다. https://github.com/gregoryv/uncover 에서 사용할 수 있습니다 .

용법

go get -u github.com/gregoryv/uncover/...
go test -coverprofile /tmp/c.out
uncover /tmp/c.out

스크린 샷

여기에 이미지 설명 입력


답변

당신이 사용하는 경우 VSCode을 이 기능은 상자를 지원 (IS 그러나 기본적으로 비활성화 )

저장 + 커버리지보고에 대한 테스트를 켜십시오.

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브라우저에서 생성 된 파일을 열고 자세한 커버리지 정보를 분석합니다.