まとまった時間が取れたので Rust 言語の勉強を始めることにした。何はともあれ、もはや自動単体テストを書きながら開発しないと落ち着かないので、Rust でのテストカバーレジの計測方法を調べてみた。今のところ、 kcov を使った行カバレッジ、つまり行単位で何割にあたるソースコードが単体テストで実行されたのかを取得するのが簡単そうだった。
以下、カバレッジ取得をするために必要なセットアップ手順を備忘録しておく。
前提環境
以下の環境で動作確認をした。
- Ubuntu 18.04
- rustup 1.20.2 (13979c968 2019-10-16)
- rustc 1.38.0 (625451e37 2019-09-23)
- cargo-kcov 0.5.2
- kcov 37
なお kcov は Windows では使えない。が、WSL 上の Ubuntu でも同様に環境を整えられるので、Windows 開発者は WSL 環境でセットアップして、カバレッジ計測時に適宜 WSL を起動すれば良いだろう。
セットアップ手順
必要なOSのパッケージをインストール
sudo apt-get install binutils-dev libiberty-dev libcurl4-openssl-dev libelf-dev libdw-dev cmake gcc g++
参考にした以下フォーラム投稿で挙げられたパッケージに加え、自分の環境では
g++
とlibiberty-dev
、binutils-dev
も必要だった。
kcov をビルド・インストール
curl -sSL https://github.com/SimonKagstrom/kcov/archive/master.tar.gz | tar xz cd kcov-master mkdir build cd build cmake .. # [*1] make sudo make install
- [*1] 上記の通り実行すると kcov は
/usr/local
下にインストールされる。インストール先を、たとえば/opt
下に変更したければcmake -DCMAKE_INSTALL_PREFIX=/opt ..
などと追加オプションを指定してやること。
- [*1] 上記の通り実行すると kcov は
cargo-kcov
をインストールcargo install cargo-kcov
カバレッジを計測したいプロジェクトのディレクトリで
cargo-kcov
を実行cd /path/to/the/rust/project cargo kcov
ターミナル出力は cargo test
と完全に同じ内容になるものの、ひっそりと target/cov/index.html
にカバレッジレポートが出力されているはず。カバレッジレポートはプロジェクト全体のカバー率、ファイルごとのカバー率、およびファイルごとの詳細が含まれている。ファイルごとの詳細画面の例を、以下に貼り付けておく。カバーした行は緑色、カバーできなかった行は赤色で表示されており、分かりやすい。
レポートは静的に出力されるため、一度ブラウザーで開いておけば、リロードするだけで最新情報に表示を更新できる。これだけできれば十分だね。ありがたく使わせてもらうとしよう。