CONTENTS
ENVIRONMENTS
- rust: 1.51
コードで
以下の shell script でカバレッジをとることができる。
rustup component add llvm-tools-preview rustup install nightly cargo install grcov export RUSTFLAGS="-Zinstrument-coverage" export LLVM_PROFILE_FILE="target/coverage/%m-%p.profraw" cargo +nightly build cargo +nightly test grcov ./target/coverage \ -s . \ --binary-path ./target/debug \ --llvm \ --branch \ --ignore-not-existing \ -t html -o ./coverage rm -rf ./target/coverage
mozilla のやつってことで grcov を選んでみた。
必要な準備
カバレッジをとるツールをインストールする。
rustup component add llvm-tools-preview rustup install nightly cargo install grcov
grcov は llvm-tools-preview
を使ってレポートを作る。
また、grcov を使ってカバレッジをとるには nightly
な rust が必要。
grcov 自体は cargo install grcov
で $HOME/.cargo/bin
にインストールできる。
カバレッジをとる
export RUSTFLAGS="-Zinstrument-coverage" export LLVM_PROFILE_FILE="target/coverage/%m-%p.profraw" cargo +nightly build cargo +nightly test grcov ./target/coverage \ -s . \ --binary-path ./target/debug \ --llvm \ --branch \ --ignore-not-existing \ -t html -o ./coverage
instrument-coverage
フラグをつけて nightly
ビルド、テストをすると、profraw
ファイルが生成される。
profraw
ファイルの名前は LLVM_PROFILE_FILE
で指定する。
この profraw
ファイルから grcov でレポートを生成できる。
grcov のオプションは以下の通り。
- path:
profraw
ファイルを出力したディレクトリを指定 -s
: ソースのルートを指定--binary-path
: build したバイナリを指定--llvm
: なんか速くなるらしい--branch
: branch カバレッジを取れるらしい。うまくいってない。よくわからん--ignore-not-existing
: つけないとエラーになる。ライブラリのソース探しに行ってる雰囲気を感じる-t html -o ./coverage
: html 形式で指定したディレクトリにレポートを出力--ignore
:--ignore tests/**
とか、glob で無視するファイルを指定
カバレッジが 100% じゃなかったらエラーにする
カバレッジ 100% を目指すのはあんまり意味ない。 けど、無視するファイルを上手く指定してやれば、テストもれを検出できる。
grcov が出力した html から以下のコマンドで 100% か確認できる。
grep abbr "${output_dir}/index.html" | head -1 | grep "100 %"
abbr タグでサマリがマークアップされている。 line, function, branch の順に並んでいるので、これの最初のやつを確認する。
とりあえず line カバレッジが 100% になればいいかな。
まとめ
rust でカバレッジをとる方法をまとめた。