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 でカバレッジをとる方法をまとめた。