## 概要 仕様上、[[Rustのバイナリクレートには結合テストを書けない]]。が、動作保証をするためにテストを書きたい。 ## 解決方法 処理のほぼすべてを[[ライブラリクレート]]に記述し、[[バイナリクレート]]を薄いラッパーとして利用すれば、必要な結合テストはほぼ作成できる。 以下は具体例。 ```console  src ├──  lib.rs └──  main.rs  tests └──  integration_test.rs ``` `src/lib.rs` ```rust // 通常は沢山のmoduleを利用する use std::error::Error; pub fn run() -> Result<(), Box<dyn Error>> { // CLIだったらコマンドパーススタートの関数、APIならAPIスタートの関数など Ok(()) } ``` `src/main.rs` ```rust use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { // libクレートのスタート処理を呼び出すだけの薄いラッパー bintest_sample::run() } ``` `tests/integration_test.rs` ```rust use bintest_sample::run; use std::error::Error; #[test] fn it_pass() -> Result<(), Box<dyn Error>> { run()?; Ok(()) } ``` ## 参考 - [テストの体系化 \- The Rust Programming Language 日本語版](https://doc.rust-jp.rs/book-ja/ch11-03-test-organization.html#%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%82%AF%E3%83%AC%E3%83%BC%E3%83%88%E7%94%A8%E3%81%AE%E7%B5%90%E5%90%88%E3%83%86%E3%82%B9%E3%83%88)