Rust cargo testの使い方と注意点について
今回はRustのcargo testについて説明していきます。
cargo testとは
cargo testはテストの実行や管理を容易にするためのツールです。
cargo testを使用すると、ユニットテストや統合テストを自動的に実行し、テストの結果を確認することができます。
cargo testの使い方
テストの作成
Rustのテストは通常、同じファイル内に書かれたユニットテストと、testsディレクトリに置かれた統合テストの2種類があります。
ユニットテスト
ユニットテストは通常のRustファイルの中に書きます。
#[cfg(test)]アトリビュートを使用して、テスト用のモジュールを定義します。
// src/lib.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
}
}
統合テスト
統合テストは、プロジェクトのルートにあるtestsディレクトリ内に配置します。これらのテストは、通常のRustファイルとして書きます。
// tests/integration_test.rs
use your_crate_name;
#[test]
fn test_add() {
assert_eq!(your_crate_name::add(2, 3), 5);
}
テストの実行
cargo testコマンドを実行すると、プロジェクト内のすべてのテストが実行されます。
cargo test
特定のテストのみを実行する場合は、テスト名を指定します。
cargo test test_add
Rustの案件を探すならクラウドワークス テック
cargo testの注意点
#[test]アトリビュート
:各テスト関数には#[test]アトリビュートを付ける必要があります。このアトリビュートが付けられた関数がテストとして認識され、実行されます。
cargo test -- --ignored
デフォルトでは#[ignore]アトリビュートが付けられたテストは実行されません。
これらのテストを実行するには、cargo test -- --ignoredを使用します。
ベンチマーク
ベンチマークテストを行う場合#[bench]アトリビュートを使用します。
ただし、これはnightly版のRustコンパイラが必要です。
環境変数の設定
テスト実行時に環境変数を設定する場合.cargo/config.tomlファイルを使用できます。
# .cargo/config.toml
[env]
MY_ENV_VAR = "value"
クレートの分離
統合テストはクレートが外部からどのように使用されるかを確認するために役立ちます。
testsディレクトリ内のファイルは、クレートの公開APIを通じてのみクレートにアクセスできます。
ドキュメントテスト
Rustはドキュメントコメント内にテストを含めることができ、cargo testはこれらのテストも実行します。
ドキュメントテストは、コード例が正しいことを確認するために有用です。
/// Adds two numbers together.
///
/// # Examples
///
/// ```
/// let result = your_crate_name::add(2, 3);
/// assert_eq!(result, 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
出力の抑制
デフォルトではcargo testは各テストの標準出力を抑制します。
すべての出力を表示するには、cargo test -- --nocaptureを使用します。
cargo test -- --nocapture
Rustをもっと詳しくなりたい方に
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。
Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。
基礎から学ぶRustプログラミング入門
本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。