TL;DR

Rust のテスティングフレームワーク。手続き的マクロを使って、フィクスチャを使うテストとパラメータ化テストを書けるようにする。

仕組み

#[fixture] を付けた関数はフィクスチャになる。テスト関数は、フィクスチャと同じ名前の引数を書くだけで、その戻り値を受け取れる。フィクスチャが別のフィクスチャを使うこともでき、共通の準備処理を各テストから切り離せる。

#[case(...)] を並べると、それぞれの入力でテストが 1 つずつ生成される。引数に #[values(...)] で値の一覧を書くと、すべての組み合わせでテストが生成される。

例

公式ドキュメントの、フィボナッチ数を確かめるパラメータ化テストの例。

use rstest::rstest;
 
#[rstest]
#[case(0, 0)]
#[case(1, 1)]
#[case(2, 1)]
#[case(3, 2)]
#[case(4, 3)]
#[case(5, 5)]
#[case(6, 8)]
fn fibonacci_test(#[case] input: u32,#[case] expected: u32) {
    assert_eq!(expected, fibonacci(input))
}
 
fn fibonacci(input: u32) -> u32 {
    match input {
        0 => 0,
        1 => 1,
        n => fibonacci(n - 2) + fibonacci(n - 1)
    }
}

関連

出典