10章1〜3節まで。
英単語数を数えるプログラムを作りながら、パケージ・ドキュメント・テストについて学ぶ感じ。
基本的に打ち込み試しながら読むスタイルで進めた。
とても参考になった。
おぼえがき
パッケージとクレート
- 用語整理
- クレート: 1つのRustプログラム。1つ以上のモジュールで構成される実行ファイルやライブラリ
- パッケージ: Cargoの最小単位。複数のクレートを持てる
- ワークスペース: 複数のパッケージで構成されるプロジェクト
- プロジェクト: Cargoの最大単位。1つ以上のパッケージを持つ
- CargoはRustのビルドマネージャー兼パッケージマネージャ
- bin/libが混在しているクレートも作れる
ドキュメント
///
が次のアイテムに対するドキュメンテーションコメント//!
が上位アイテムに対するドキュメンテーションコメント- ドキュメントはマークダウン形式で書く
- 行頭の
*
は、リストになるっぽい - リンクも書ける
- 行頭の
- ドキュメンテーションコメントのセクション
- Panics: 関数がパニックを起こす可能性がある場合、パニックする条件
- Errors: 関数がResultを返す場合にエラーを返す条件
- Safety: unsafeな関数を書くときにユーザが保証すべき条件
- Examples: 関数の使い方の例
- ドキュメントの付け忘れを防ぐためのアトリビュートもある
- 以下をファイルの先頭につけておくとよい
#![warn(missing_docs)]
#![deny(missing_docs)]
- 以下をファイルの先頭につけておくとよい
//! クレートの説明コメント //! 複数行書けるよ /// 次のアイテム(ここでいうCountry)に対するドキュメンテーションコメント /// 複数行書けるよ pub enum Country { //! 上位アイテム(ここでいうCountry)に対するドキュメンテーションコメント //! 複数行書けるよ America, China, Japan, } /** このスタイルは非推奨とのこと */ impl Default for Country { fn default() -> Self { /*! このスタイルは非推奨とのこと */ Country::Japan } }
cargo doc
で、ドキュメント作成 −cargo doc --open
で、ブラウザで開ける
−cargo doc --no-deps
で、依存クレートのドキュメントは作成しない
テスト
- テスト用関数には、関数定義前に
#[test]
をつける - テスト用のアサーションマクロ
assert!(expr)
assert_eq!(left, right)
assert_neq!(left, right)
- 上記マクロはフォーマット引数を取れる
assert!(a + b == 30, "a = {}, b = {}", a, b);
- テスト用関数をResult型を返すようにすれば、
?
演算子が使える - パニックするテスト関数には、
#[should_panic]
をつける- パニック発生でテスト結果はOKになる
cargo test
で、テスト実施cargo test anyword
で、anyword
を含む名前のテスト関数のテスト実施cargo test -- --exact 関数名
で、指定関数のみテスト実施時間がかかるテストは、テスト関数に
#[ignore]
をつけておく- テスト実施時に、
cargo test -- --ignored
とすればテストを飛ばしてくれる
- テスト実施時に、
下記例みたいなassertを展開するマクロを用意すると便利かも
macro_rules! assert_map { ($expr: expr, {$($key: expr => $value: expr),*}) => { $(assert_eq!($expr[$key], $value));* }; } #[test] fn test_func() { let my_map = my_make_map(); assert_map(my_map, {"a" => 1, "b" => 3}); // assert_eq!(my_map["a"], 1); // assert_eq!(my_map["b"], 3); に展開される
- テストを書く場所としては、以下の4種類があるとのこと
- プログラム中
- プログラム中のテスト用モジュール
#[cfg(test)] mod test { ... }
- テスト専用のディレクトリ(
tests/*
)配下- Cargoがテストクレートとしてコンパイルしてくれるっぽい
- ドキュメンテーションコメント内
- ホワイトボックステストは、プログラム中に書くとよいっぽい
- ブラックボックステストは、テスト専用ディレクトリに書くとよいっぽい
課題
- ワークスペースの理解が曖昧。11章で扱うらしい
- ライブラリのファイル名は
lib.rs
が慣習なのだろうか
- 作者: κeen,河野達也,小松礼人
- 出版社/メーカー: 技術評論社
- 発売日: 2019/05/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る