Rustのrstestでパラメータテストをしてみる
はじめに
この記事では、「Rustのrstestを使ったパラメータテストの仕方」について書いています。\
自分に向けた備忘録でもありますが、「Rustでパラメータテストがしたい」「rstestを使ってみたい」な人の一助になれば嬉しいです。
rstestとは何か
rstestとは、フィクスチャベースのテストフレームワークで、フィクスチャとテーブルベースのテストが書けるようになるものです。
フィクスチャとは、テストを実行するのに必要な条件のことで、テーブルベースのテストの入力と期待値をテーブル形式で記述し、そのテーブルを走査しながら実行するようなテストのことです。
rstestでパラメータテストの行い方
Note
試した際の環境は以下の通りです。
- OS: Windows 10
- Rust: 1.64.0
Rustのプロジェクトをcarog new --lib rstest_sample
のコマンドを実行して作ります。
その後、まずはCargo.toml
に依存関係を加えます。[dependencies]
の項目に以下を追加してください。
rstest = "0.15.0"
続いてlib.rs
のコードにrstestでパラメータテストの簡単なサンプルを実行できるコードを書いていきます。
下のようにlib.rs
の内容を書き換えてください
use rstest::rstest; fn add_two(num: u32) -> u32 { num + 2 } #[rstest(input, expected, case(0, 2), case(1, 3), case(2, 3), # わざと失敗させている case(3, 5), )] fn test_add_two(input: u32, expected: u32) { assert_eq!(expected, add_two(input)); }
ポイントは以下の通りです。
#[rstest
から続く部分でテストに使用するパラメータを記述します- テスト関数(ここでは
test_add_two
)の引数に、上で記述したパラメータを指定します。
ではlib.rs
を書き換えたらcargo test
を実行してみましょう
下のような出力が得られます。
running 4 tests test test_add_two::case_1 ... ok test test_add_two::case_2 ... ok test test_add_two::case_4 ... ok test test_add_two::case_3 ... FAILED failures: ---- test_add_two::case_3 stdout ---- -------------- TEST START -------------- thread 'test_add_two::case_3' panicked at 'assertion failed: `(left == right)` left: `3`, right: `4`', src\lib.rs:14:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: test_add_two::case_3 test result: FAILED. 3 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
4つのcase(パラメータ)についてテストがされ、わざと失敗させるよう書いたcaseについてはちゃんと失敗されました。
おわりに
「Rustのrstestを使ったパラメータテストの仕方」について解説しました。
私個人の感覚としてはpytestのように書けて中々良さそうだなと感じました。
さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。