Rustでcargo testする時のテスト対象
Rustでテストを行う時、cargo test
とすると#[cfg(test)]と書かれた部分を自動でテストをしてくれますが、ふと「一体どこまでのファイルがテストされるんだろう?srcフォルダにあれば全てされるんだろうか?」と思い調べてみたのでその記録を残します。
結論としては、「srcの中のlib.rs, もしくはmain.rsから追いかけられるrsファイルで#[cfg(test)]が書かれている部分がcargo test
でテストされる」ということでした。
例えば、srcフォルダ以下が下記のような構成で、また、module_a.rsとmodule_b.rsにはどちらもテストが書かれているとします。
src lib.rs module_a.rs module_b.rs
そしてlib.rsの中身が
pub mod module_a; pub mod module_b;
である時、cargo test
をするとmodule_a.rsとmodule_b.rs両方に書かれているテストが実行されます。
では次に
pub mod module_a; //pub mod module_b;
と、module_bをコメントアウトした状態でcargo test
をするとどうなるかと言うと、この時はmodule_a.rsに書かれているテストのみが実行されます。
コメントアウトされたモジュール(ここではmodule_b.rs)内のテストは実行されないんですねー。
つまり、「lib.rsから辿れるモジュールのテストが実行される」ということのようです。
さて、次はsrcフォルダ内が下のようにlib.rsとmain.rsが混在している時はどうなるでしょうか。
src lib.rs main.rs module_a.rs
この場合、lib.rsから辿れるモジュールとmain.rsに書かれている(辿れる)モジュールのテストが実行されます。
以上、Rustのテストに関する記事でした。