Go言語において、テストカバレッジはテストスイートがプログラムのどの程度をカバーしているかを測定するためのツールです。
テストカバレッジは、テストがコードのどの範囲に到達したかを定量化し、コードの品質と安全性を向上させるために使用されます。
ようは、テスト対象のコードについて、テストを実施した割合です。
具体的には、テストカバレッジは以下の2つのメトリックで測定されます。
- 行カバレッジ: テストスイートがプログラムの各行をどの程度実行したかを示すパーセンテージです。
- 分岐カバレッジ: プログラム内の各条件分岐をどの程度テストしたかを示すパーセンテージです。
例えば、以下のようなコードがある場合を考えます。
func add(a, b int) int {
if a > 0 && b > 0 {
return a + b
}
return 0
}
この場合、行カバレッジが100%になるようなテストケースは次のようになります。
func TestAdd(t *testing.T) {
if add(2, 2) != 4 {
t.Errorf("add(2, 2) should be 4")
}
if add(0, 1) != 0 {
t.Errorf("add(0, 1) should be 0")
}
if add(-1, 1) != 0 {
t.Errorf("add(-1, 1) should be 0")
}
}
これらのテストケースを実行すると、行カバレッジが100%になります。
テストカバレッジを測定することにより、テストスイートがカバーしていないコードの範囲を特定し、それに応じたテストを追加することができます。これにより、コードの品質と安全性を向上させることができます。
テスト方法
Go言語におけるテストカバレッジの測定方法は、標準ライブラリで提供されている go test
コマンドを使用して行います。
具体的には、以下のコマンドを実行します。
go test -cover ./...
このコマンドは、カレントディレクトリおよびサブディレクトリ内のすべてのパッケージのテストを実行し、カバレッジレポートを出力します。
レポートには、各関数の行カバレッジおよび分岐カバレッジのパーセンテージが表示されます。
また、どの行が実行されたかどうか、どの分岐がテストされたかどうかを示すカバレッジプロファイルが生成されます。
また、カバレッジレポートをHTML形式で出力することもできます。
以下のコマンドを実行すると、coverage.html
という名前のHTMLファイル
が生成されます。
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
このHTMLレポートには、視覚的にカバレッジレポートを確認できるツールが含まれており、どの部分がカバーされているかどうかをより簡単に理解できます。