web-dev-qa-db-ja.com

Golangでコードカバレッジを測定する方法は?

Go単体テストのコードカバレッジの生成に成功した人はいますか?そのためのツールがウェブ上で見つかりません。

84
George Atsev

Go 1.2(2013年第4四半期、rc1が利用可能) が表示されることに注意してくださいテストカバレッジ結果

go testの主要な新機能の1つは、計算できるようになり、新しくインストールされた「go tool cover」プログラムの助けを借りて、テストカバレッジ結果を表示できることです

coverツールは go.tools subrepository の一部です。実行することでインストールできます

$ go get golang.org/x/tools/cmd/cover

カバーツールは2つのことを行います。

  • まず、「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

イヴァンブラック 言及 コメント内

go test -coverprofile cover.outその後
go tool cover -html=cover.out -o cover.htmlブラウザーでcover.htmlを開きます

ブラウザが開くのを待ちたくないので、このエイリアスを定義しました。

alias gc=grep -v -e " 1$" coverage.out

gcと入力するだけで、まだカバーされていないすべての行のリストnotがあります(ここではcoverage.outnot1」で終わる)。

101
VonC

Goには、テストとカバレッジのための素晴らしいツールが付属しています。 Goツールはすべて十分に文書化されていますが、go tool cover -help読むことをお勧めします Go公式ブログのカバーストーリー記事 。たくさんの例がありますので、強くお勧めします!

〜/ .bash_profileにこの関数があります。 (端末に貼り付けて試してみてください)。

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

次に、cdをgo project/packageフォルダーに入れ、coverと入力します。これにより、ブラウザでビジュアルツールが開き、現在のパッケージ内の各ファイルのテスト済みコードと未テストコードが表示されます。非常に便利なコマンド!まだ100%テストされていないものを見つけるために強くお勧めします!表示される結果はファイルごとです。左上のドロップダウンから、すべてのファイルの結果を見ることができます。

このコマンドを使用すると、たとえば、パッケージのカバレッジを確認することもできます。

cover fmt

このコマンドからのターミナルの出力は次のようになります。

ok      fmt 0.031s  coverage: 91.9% of statements

ブラウザに加えて、このツールにはテストでカバーされていないすべてのコード行が赤で表示されます。

enter image description here

ブラウザで開くのではなく、htmlカバレッジファイルを保存することもできます。これは、テストとカバレッジがJenkinsのようなCIツールによって実行される場合に非常に便利です。そうすれば、中央サーバーからカバレッジファイルを提供でき、チーム全体が各ビルドのカバレッジ結果を確認できます。

32
Pavel Nikolov

そうです here 、いくつかのドキュメント here

$ 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
$

私はそれを使用していません、これは私が知っているすべてです。

5
zzzz

上記の良い答えに加えて、私はこれらの3行がそれを取得する最も簡単な方法であるとわかります(これにはすべてのパッケージが含まれます):

go test -v -coverprofile cover.out ./YOUR_CODE_FOLDER/...
go tool cover -html=cover.out -o cover.html
open cover.html

HTMLファイルには、すべてのファイルに移動するためのドロップダウンボタンがあります。

4
Sharon Katz

ターミナルで関数ごとにカバーされていない行を直接見たい場合は、この目的のためにカバーツールを書き直しました。 https://github.com/gregoryv/uncover で入手できます。

使用法

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

スクリーンショット

enter image description here

2
dot7

ヘルプメニューやこの質問に対する他の回答に触発されて、実行するだけです:

f=cover.out; if [ -f $f ]; then rm $f; fi; go test ./... -coverprofile $f && \
go tool cover -html $f
1
030

すばやく簡単な方法は、組み込みのgoに付属のカバレッジツールを使用することです。

$ go test -coverprofile cp.out // 1つのライナーパーセンテージでカバレッジを発行します

上記のコマンドを実行した後、コードカバレッジを視覚的に確認したい場合(カバーされたステートメントや欠落など)

$ go tool cover -html = cp.out

注:カバレッジを表示するフォルダーで上記のコマンドを実行する必要があります

gaia-docker/base-go-buildDocker Imageを使用してみてください。

これは、カバレッジを構築およびテストするために必要なすべてを含むDockerイメージです。 Dockerコンテナー内でテストカバレッジを実行すると、プロジェクトのテストカバレッジ結果を含む。coverフォルダーが作成されます。

docker run --rm -v "$PWD":$PROJECT_PATH -w $PROJECT_PATH $BUILDER_IMAGE_NAME /go/script/coverage.sh

テストカバレッジスクリプト すべてのプロジェクトのフォルダーで実行され、。coverフォルダーjunitおよび各フォルダーのカバレッジレポートを生成し、すべてのプロジェクトのテスト。

Codecovは、カバレッジ結果を収集するスクリプトも提案しています。 複数ファイル

0
Effi Bar-She'an

Golangのテストカバレッジ

go get github.com/axw/gocov/gocov go get -u gopkg.in/matm/v1/gocov-html

正しくインストールされていることを確認し、ターミナルからアクセスします

テストケースを実行する

テストケースを実行すると、ファイルに基づいて.jsonファイルが再評価され、コードカバレッジレポートが.htmlファイルで取得されます。

gocov test >your_Coverage_report.json

テストケースが完了したら、.jsonを使用して.htmlファイルでレポートを生成します

gocov-html your_Coverage_report.json >your_Coverage_report.html

参照

go langのGoTestカバレッジツール

テストレポートツールに移動

別の方法

ネイティブテストカバレッジに進む

go test -coverprofile=coverage.out
go tool cover -html=coverage.out
0
muthukumar