golang test coverage 100%を目指してみる


golangでtestを書いてみたら、coverageが75%だったので、100%を目指してみる

そもそもどこが通ってないのか調べてみる

coverageをhtmlで可視化してくれるツールがあるので、それを流してみる。

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

これで、coverしているところは緑色に、してないところは赤になる。

関数ベースでみることもできる

$ go tool cover -func=cover.out
http2/http2.go:21: ServeHoge 100.0%
http2/http2.go:40: main 0.0%
total: (statements) 75.0%

mainが通ってなかったけど、どうするのこれ?

go でmainを並列処理にしてサーバを立てたあとに、Getを使って、サーバにアクセスすることでテストする。
deferでBodyをCloseするのを忘れないようにしろ、とのこと。

http2_test.go_part
func TestServer(t *testing.T) {
    go main()
    resp, err := http.Get("http://localhost:12344")
    if err != nil {
    t.Fatal(err)
    }   
    defer resp.Body.Close()
}                                                                                               

テストのカバレージの基準として、命令網羅(C0)、分岐網羅(C1)、条件網羅(C2)
という基準があるけど、このgoのtestは、C0でのカバレージを出しているとのこと。
たまにCIでカバレージ70%を基準にするという話を聞くけど、C1なのかなと思っていたけど、
どうなんだろ。今度見かけたら意識してみよう。