Chapter 25

ユニットテスト

mebiusbox
mebiusbox
2023.03.16に更新

📌 ユニットテスト

Rust にはテストコードを記述する機能が用意されています.テストを実行するにはcargo testコマンドを実行します:

cargo test

実行するユニットテストの関数にはtest属性を付けます:

#[test]
fn it_works() {
    assert_eq!(2 + 2, 4);
}

テスト時のみ(cargo test)ビルドするモジュールを作れます.それにはモジュールの前に cfg(test) 属性を付けます.

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert_eq!(2 + 2, 4);
    }
}

🔹 assertions

テストに便利なマクロがいくつか用意されています. assert!マクロは引数が true かどうかをテストします.また, ==!= 演算子を使う代わりに assert_eq!マクロ, assert_ne!マクロが用意されています.

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        assert!(2 == 2);
        assert_eq!(2 + 2, 4);
        assert_ne!(2 + 2, 5);
    }
}

assert_eq!マクロやassert_ne!マクロは、失敗したときに実際にどの値かを出力してくれますが、assert!マクロの場合はそれがないので、可能ならassert_eq!マクロやassert_ne!マクロを使いましょう.

🔹 should_panic属性

assert!マクロや, unwrapメソッドなどはpanic!マクロを呼び出す場合があります.場合によってはpanic!マクロが呼び出されることを期待したテストコードを記述したい場合があります.しかし,テストは通常panic!マクロを起こすと失敗になります.そこで,should_panic属性を付けることで, panic!マクロを起こすことがテストの目的であることを明示します:

#[test]
#[should_panic]
fn it_works() {
    panic!();
}