test

テストの記述法 - The Rust Programming Language 日本語版

Rustには簡単なテストフレームワークが組み込まれている。 テストはマルチスレッドで並列実行される。これはcarto test -- --test-threads 1のように調整できる。 テストが失敗した結果のみ出力されるので、成功結果も出力したければcargo test -- --no-captureとする。

Unit test

ユニットテスト - Rust By Example 日本語版

assersionする

テストは#[test]属性が付与された通常の関数である。 下記を利用する。

上記は非テストでも利用できる。つまりリリースビルドにも入ってしまう。 デバッグビルド時のみ有効にしたければ下記を利用する。

もっといえば、テスト時のみ実行するように#[cfg]属性で設定するのが慣習となっている。

panicする

エラーが起こる場合を正常としたテストをしたいなら、#[should_panic]属性を利用する。 パニックが起こることが自明な静的コードの場合、#[allow]属性でコンパイラへ指示する。

Integration test

インテグレーションテスト - Rust By Example 日本語版

Cargoはsrc/と同じ階層のtests/配下を統合テストとして扱う。 クレートを外部のユーザの世界から見る。つまりクレートの公開APIをテストすることがポイント。

cargo test: 単体テスト、統合テストを実行する cargo test --test foo: tests/foo.rsに書かれた統合テストを実行する