Rustのインテグレーション・テスト構成

Rustのインテグレーション・テストのベターな構成は、 Integration Testing in Rustの解説が参考になります。

公式ガイドの説明どおりに素朴に構成すると、テストファイルごとにバイナリが生成されます。

  • tests/integration/以下に各テストファイルを置く
  • tests/integration/main.rsから各テストファイルを参照する

という構成にすると、結合テストは単一クレートになります。

main.rs

公式ドキュメントに記述がないのですが、tests/integration/main.rscargo testが直接実行します。
各テストケースをインクルードしておくことで、一式実行可能です。

extern crate target_app;

// Shared functionalities, if needed.
mod common;

// List each test case.
mod no_login_test;
mod login_test;

また、common.rsのように共通ヘルパー機能も実装できます。各テストケースからはuse crate::commonというスコープで参照できます。

選択的に実行するテスト

外部システムと接続するテストケースなど、頻繁に実行するわけではないテストには標準機能の#[ignore]マクロを利用できます。
#[ignore]をつけたテストケースはcargo testコマンドでは無視されます。

そしてcargo test -- --ignoredコマンドを実行すると、ignore対象のテストケースのみ実行する挙動になります。

ignoreであるか否かの区別のみであまりセマンティックには分類できませんが、限定的に実行するテストを区分したいだけであれば役に立ちます。

中馬崇尋
Chuma Takahiro