
DDDの考えを取り入れることでテストコードが書きやすくなりました。
以前はほとんどテストコードを書いてなかったので気づかなかったのですが、コマンドラインで
cargo test と実行すると、rustは基本的にプロジェクトフォルダ下の全てのテストを実行します。
そのため、examplesフォルダ下にあるテストコードも対象に加わってしまいます。
私のexamplesフォルダの使い方は
examplesフォルダ下にあるコードは基本的に変更はしないので一旦テストをパスすればエラーが報告されないので実害があまりないはずなのですが、examples下のconvert_to_asciiフォルダではrust-toolchain.tomlを設置してnightlyなrustを対象にテストコードを書いていました。
そのため、普段使うstableなrust環境で上記のcargoコマンドを実行すると、環境差分によるエラーが報告されてしまいます。
Cargo Bookによると、どうやらこれはautomatic target discoveryという機能によってexamplesフォルダも対象に含まれてしまっているようです。
この機能をオフにすることでconvert_to_asciiフォルダを対象にしないこともできますが他の実行してほしいテストコードも実行しなくなりそうです。
個別にテストを指定して実行しても良いのですが、全テストを実行したいときには非常に不便です。
こういうことはAIに相談だ!、ということでChatGPTさんに聞いてみるといくつか方法があり、そのうちの一つをここに紹介します。
Cargo.tomlに新たにfeatureを追加して、convert_to_asciiフォルダのテスト実行にはこの追加したfeatureを指定した場合のみテストを実行するようにします。
そのためにまずfeatureを追加します。
Cargo.tomlを開いて下記のように追加しました。
[features]
default = []
nightly = []Code language: TOML, also INI (ini) nightlyなfeatureは既定値として既にありますが、重ねて書いても問題ないようです。
これでdefaultとnightlyの2つの区別がつくようになりました。
convert_to_asciiフォルダはnightlyなfeatureが必要であることを認識させるため、その設定も追加します。
[[example]]
name = "convert_to_ascii"
path = "examples/convert_to_ascii/main.rs"
required-features = ["nightly"]Code language: TOML, also INI (ini) これでこのフォルダのコードの実行はnightlyなfeatureが前提条件として求められるのでcargo コマンドの通常実行時には対象になりません。
このフォルダのコードを実行する場合は、
cargo test --example convert_to_ascii --features nightly のようにfeatureを指定して実行する必要があります。(実際にはrust-toolchain.tomlが設置されているので、このフォルダに移動してから上記コマンドを実行する)
第2部 TOC
GitHubにコードをアップロードしています。0.1.1バージョン
コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。
# Example
$ cargo run --example first_step
Code language: Bash (bash)