ユニットテスト
test属性
「ユニットテスト」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
Rustでのテスト
Rustにはテスト機能が組み込まれているため、外部フレームワークは必要ありません。テストは #[test] が付いた通常の関数で、cargo test によって実行されます。
最初のテスト
テスト関数は引数を取らず、アサーションを使います。正常に戻れば成功し、パニックすると失敗します。
fn add(a: i32, b: i32) -> i32 {
a + b
}
#[test]
fn it_adds() {
assert_eq!(add(2, 3), 5);
}
fn main() {
println!("{}", add(2, 3));
}アサーションマクロ
標準的なアサーションは次のとおりです。
assert!(cond)— 条件が false の場合に失敗assert_eq!(a, b)— 等しくない場合に失敗assert_ne!(a, b)— 等しい場合に失敗
fn main() {
let x = 4;
assert!(x > 0);
assert_eq!(x, 4);
assert_ne!(x, 5);
println!("All assertions passed");
}testsモジュール
慣例として、ユニットテストは #[cfg(test)] が付いたモジュールに記述します。これにより、テスト時にのみコンパイルされます。
fn square(n: i32) -> i32 {
n * n
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn squares_correctly() {
assert_eq!(square(5), 25);
}
}
fn main() {
println!("{}", square(5));
}use super::*
テストモジュールは入れ子になっているため、use super::* を使うと親モジュールのアイテム(テスト対象の関数など)をスコープに取り込めます。
テストの実行
cargo test はすべてのテストをコンパイルして実行します。成功、失敗、無視されたテストの数が報告されます。
cargo testパニックのテスト
#[should_panic] を使うと、特定の条件で関数がパニックすることを検証できます。
fn checked_div(a: i32, b: i32) -> i32 {
if b == 0 {
panic!("division by zero");
}
a / b
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[should_panic(expected = "division by zero")]
fn panics_on_zero() {
checked_div(10, 0);
}
}
fn main() {}Resultを返すテスト
テストでは Result を返せるため、? 演算子を使えます。Err を返すとテストは失敗します。
fn parse(s: &str) -> Result<i32, std::num::ParseIntError> {
s.parse::<i32>()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_number() -> Result<(), std::num::ParseIntError> {
let n = parse("42")?;
assert_eq!(n, 42);
Ok(())
}
}
fn main() {}テストを無視する
時間のかかるテストや環境に依存するテストには #[ignore] を付けます。cargo test -- --ignored で明示的に実行できます。
#[test]
#[ignore]
fn expensive_test() {
// long-running work
}
fn main() {}便利なテストフラグ
テスト実行時に便利なオプション:
cargo test name— 名前に一致するテストを実行cargo test -- --nocapture— println の出力を表示cargo test -- --test-threads=1— 直列に実行
プライベート関数のテスト
テストモジュールは同じファイル内に入れ子になっているため、プライベート関数にもアクセスできます。これは統合テストにはできないことで、ユニットテストの重要な利点です。
fn internal(n: i32) -> i32 {
n + 1
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn tests_private() {
assert_eq!(internal(4), 5);
}
}
fn main() {
println!("{}", internal(4));
}理解度チェック
Cargo が実行するテストとして関数をマークする属性はどれですか?
まとめ
Rust に組み込まれたテストについて学びました:
#[test]でテスト関数をマークする- アサーションには
assert!、assert_eq!、assert_ne!がある - テストは
use super::*を持つ#[cfg(test)]モジュールに記述する #[should_panic]とResultを返すテストでエラーを扱うcargo testですべてを実行する
よくある質問
「ユニットテスト」レッスンは無料ですか?
はい。「ユニットテスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「ユニットテスト」で何を学びますか?
test属性 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「ユニットテスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ユニットテスト
- 統合テスト
- ドキュメントコメント
- ドキュメントテスト