コンテンツにスキップ

Go/goコマンド/tool/covdata/intersect

出典: フリー教科書『ウィキブックス(Wikibooks)』

go tool covdata intersect

[編集]

何をするコマンドか

[編集]

dir1dir2 の両方でカバーされている部分だけを抽出したカバレッジデータを生成します。

dir1 ∩ dir2 = outdir

基本的な使い方

[編集]
mkdir -p ./result
go tool covdata intersect -i=dir1,dir2 -o=./result

フラグ解説

[編集]

-i:入力ディレクトリ(必須)

[編集]
go tool covdata intersect -i=./unit,./integration -o=./result

カンマ区切りでちょうど2つ指定します。subtract と異なり順序は関係ありません。

-o:出力ディレクトリ(必須)

[編集]
mkdir -p ./result
go tool covdata intersect -i=./unit,./integration -o=./result

事前にディレクトリを作成しておく必要があります。

-pkg:対象パッケージの絞り込み

[編集]
go tool covdata intersect -i=./unit,./integration -o=./result \
    -pkg=github.com/myorg/myapp/pkg/...

使用例

[編集]

ユニットテストと統合テストの両方でカバーされている箇所を確認

[編集]
mkdir -p ./both
go tool covdata intersect -i=./unit,./integration -o=./both

# 両方でカバーされている関数を確認
go tool covdata func -i=./both

両方のテストで通る箇所はテストが重複している可能性があり、ユニットテストだけで十分かもしれません。

重複カバレッジの割合を確認

[編集]
# 全体のカバレッジ
go tool covdata percent -i=./unit,./integration

# 両方で重複してカバーされている割合
go tool covdata percent -i=./both

merge / subtract / intersect の関係整理

[編集]
unit:        ████████░░░░
integration: ░░░░████████

merge:       ████████████  (どちらかがカバー)
intersect:   ░░░░████░░░░  (両方がカバー)
subtract     
(unit-integ):████░░░░░░░░  (unit のみカバー)
subtract
(integ-unit):░░░░░░░░████  (integration のみカバー)
コマンド 操作 用途
merge dir1 ∪ dir2 全カバレッジの合算
intersect dir1 ∩ dir2 重複カバレッジの特定
subtract dir1 - dir2 片方にしかないカバレッジの特定

まとめ

[編集]
フラグ 用途
-i 入力ディレクトリ(必須・2つ指定・順序不問)
-o 出力ディレクトリ(必須)
-pkg 対象パッケージの絞り込み
-v 詳細ログレベル

subtract と組み合わせることでテストスイートの役割分担を可視化できます。intersect で重複を把握し、subtract で各テストスイート固有のカバレッジを把握することで、テスト戦略の最適化に役立てられます。