Go로 테스트 커버리지 측정

소개



Go는 표준 기능으로 테스트 커버리지를 내릴 수 있습니다.
단순히 테스트의 커버율을 산출하는 것에서 구체적으로 어느 부분의 테스트가 부족한지를 보여주는 기능도 있으므로 이번에는 그들을 간단히 정리하고 싶습니다.

간단하게 테스트 커버리지를 측정


$ go test -cover ./...
?       app_name/api    [no test files]
?       app_name/api/config     [no test files]
ok      app_name/api/handlers   0.421s  coverage: 100.0% of statements
?       app_name/api/responses  [no test files]

간단하게 테스트 커버리지를 측정할 때는 go test -cover

구체적으로 테스트할 수 없는 위치를 표시합니다.


# cover.outというファイルテストのカバー内容を吐き出す
$ go test -cover ./... -coverprofile=cover.out

# go toolを用いてcover.htmlを作成する
$ go tool cover -html=cover.out -o cover.html

# cover.htmlを開く
$ open cover.html

구체적으로 테스트되지 않은 장소를 특정할 때는 위와 같이 명령을 치는 것으로 테스트할 수 없는 곳을 적문자로 표시시킬 수 있습니다.


불필요한 파일을 커버리지 계산에서 제거


# cover.out.tmpというファイルテストのカバー内容を吐き出す
go test -cover ./... -coverprofile=cover.out.tmp

# 自動生成コードをカバレッジ対象から外し、カバレッジファイルを作成
cat cover.out.tmp | grep -v "**_mock.go" > cover.out

# 不必要なcover.out.tmpを削除
rm cover.out.tmp

# 以下先ほどと同じ
go tool cover -html=cover.out -o cover.html
open cover.html

테스트 커버율을 측정할 때 mock용 코드 등이 들어가면 적절한 커버리지를 측정할 수 없기 때문에, 그럴 때는 조금 쉘 예술합니다
위의 경우는 코드를 mock 할 때에 _mock.go 라는 접미어를 붙이고 있으므로 그 경우는 커버리지 측정의 파일 (cover.out)로부터 삭제합니다.

마지막으로



go는 표준으로 테스트 커버리지 툴이 붙어 있는 것은 매우 좋네요!
새빨간 상태에서 테스트를 쓰고 점점 녹색으로 하는 과정은 상당히 즐겁습니다! !

이하 개인적으로 사용하고 있는 make file 커멘드입니다
자신의 mock 파일과 wire 자동 생성 파일을 제거하려고합니다.

Makefile
cover:
    go test -cover ./... -coverprofile=cover.out.tmp
    # 自動生成コードをカバレッジ対象から外し、カバレッジファイルを作成
    cat cover.out.tmp | grep -v "**_mock.go" | grep -v "wire_gen.go" > cover.out
    rm cover.out.tmp
    go tool cover -html=cover.out -o cover.html
    open cover.html

참고문헌


  • 공식 문서 ( htps : // bg. 미안해. 오 rg/코ゔぇr )
  • Go로 코드 커버리지 얻기 (htps : // 코 m / 코 코 타카 / ms / 965 08821c, 8c9, 8A)
  • 좋은 웹페이지 즐겨찾기