環境
- Ubuntu 14.04
- Go 1.3.3
インストール
$ go get code.google.com/p/go.tools/cmd/cover
テストコードの用意
package foo func Sum(a int, b int) int { return a + b }
テストコード
package foo import "testing" func TestSum(t *testing.T) { expected := 3 actual := Sum(1, 2) if actual != expected { t.Errorf("got %v\nwant %v", actual, expected) } }
コンソール上で確認
$ go test -cover PASS coverage: 100.0% of statements ok _/Users/go/src/foo 0.008s
出力して確認
カバレッジの結果をファイルに出力することもできます。
これによってどのコードを通過しているか可視化できます。
注意としてはGOPATH行ってください。でないと
$ go tool cover -func=coverage.out cover: can't find "foo.go": cannot find package ~~~~
といった感じに怒られます。
$ go test -v -coverprofile=coverage.out
コンソールで確認
$ go tool cover -func=coverage.out foo/foo.go:3: Sum 100.0% total: (statements) 100.0%
ブラウザで確認
$ go tool cover -html=coverage.out
とするとブラウザが自動で開き以下の様な結果が表示されます。
通過回数をチェック
さらに「このコードは何回通ったか」も判別できます。
covermode
オプションを付けます。
$ go test -v -coverprofile=coverage.out -covermode=count
各モードは以下のようになってます。
モード | 説明 |
---|---|
set | デフォルト。通過したかしてないかのみ |
count | 通過回数を全てカウント |
atomic | 通過回数を並列処理の中でも正確に全てカウント |
確認してみましょう。
$ go tool cover -html=coverage.out
通過回数が多いほど色が濃くなります。
左の方にマウスを置いてちょっと待つと回数が表示されます。
こちらデフォルトだと扱いづらいのですが、Coverallsなどと組み合わせるととても見やすいです。