Dev Study
← 解説「assert_eq! と Result を返すテスト」に戻る

サンプルコードで身につける: assert_eq! と Result を返すテスト

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1assert_eq! で等しさを検証する

2つの値が等しいことを assert_eq!(実際の値, 期待値) で検証する基本形です。assert!(a == b) と違い、失敗したとき left と right の実際の値を両方表示してくれるので、何がどうずれたのかをすぐ特定できます。等しさの検証はテストの大半を占めるため、まずこのマクロに慣れるのが近道です。

Rust

2assert_ne! で「等しくない」を検証する

assert_eq! と対になる assert_ne! は、2つの値が等しくないことを検証します。「ID を採番したら元の値から必ず変わっている」のように、結果の正確な値より『変化したこと』が大事な場面で役立ちます。等しいことと変わったことの両方を並べると、仕様がテストから読み取れるようになります。

Rust

3文字列整形関数を assert_eq! でテストする

前後の空白を除いて大文字化する整形関数を、入力と期待値のペアで検証する例です。String と "ALICE" のような文字列リテラルは assert_eq! でそのまま比較できます。ユーザー入力の正規化はバグの温床なので、代表的な入力パターンを assert_eq! で固定しておくのが実務の定石です。

Rust

4Result を返すテスト関数

テスト関数は Result<(), String> を返すこともでき、Ok(()) なら成功、Err なら失敗の扱いになります。Result を返す形にすると、テストの中で ? 演算子が使えるようになり、divide が Err を返した時点でテストが自動的に失敗します。失敗しうる処理を多段で呼ぶテストほど、この形の恩恵が大きくなります。

Rust

5設定値のパースを ? と assert_eq! で検証する

" 8080 " のような揺れのある入力からポート番号をパースする関数を、Result を返すテストで検証する実務寄りの例です。テスト内では parse_port(...)? で成功値を取り出してから assert_eq! で比較する、という2段構えが定番の形です。パースの失敗は Err としてテスト失敗に直結するので、成功と等値の両方を1本で検証できます。

Rust