目次

Rustの勉強[自動テスト その2]

ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる

  • blogが壊れてなおった

今日読む場所

#

NO IMAGEテストの記述法 - The Rust Programming Language 日本語版

お勉強

#

メモ

#

assertマクロを使用して==演算子を使用した式を渡すことで行うこともできます。 しかしながら、これはありふれたテストなので、標準ライブラリには1組のマクロ(assert_eq!とassert_ne!)が提供され、 このテストをより便利に行うことができます。

  • なんかやっと便利マクロって感じがしてきたな
  • assert_ne!ってなんの略だよって思ったがNot Equalだ

比較対象の値はPartialEqとDebugトレイトを実装していなければなりません。 すべての組み込み型と、ほぼすべての標準ライブラリの型はこれらのトレイトを実装しています。

  • ということは自分で作った型にもテストが書きたいならこれを実装すればいいって話しか

    単純に構造体やenum定義に#[derive(PartialEq, Debug)]という注釈を追加するだけですみます。

  • まじかよ、もっと簡単だった

テスト関数にshould_panicという別の属性を追加することで達成できます。 この属性は、関数内のコードがパニックしたら、テストを通過させます。つまり、 関数内のコードがパニックしなかったら、テストは失敗するわけです。

  • まあ、このへんも特段不思議なことはなく、期待値がでたかどうかって話やな
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    #[should_panic]
    fn greater_than_100() {
        Guess::new(200);
    }
}
  • あ、ここに書くんだ
  • まあJavaと違ってExceptionに複数の型があるわけじゃないからこれだけでいいのか
    #[test]
    //予想値は100以下でなければなりません
    #[should_panic(expected = "Guess value must be less than or equal to 100")]
    fn greater_than_100() {
        Guess::new(200);
    }
  • ああこれ何に使うんだろうって思っていたが、エラーの文字列の期待値を書いているだけか
  • fmfm

Result<T, E> を返すようなテストを書くと、?演算子をテストの中で使えるようになります。 これは、テスト内で何らかの工程がErrヴァリアントを返したときに失敗するべきテストを書くのに便利です

  • ハイハイ、この変はResultでやったね

  • 書けるようになったらかなり感覚的に実装できそうだな

  • cargo testの引数か

    テストは同時に実行されているので、テストが相互や共有された環境を含む他の共通の状態に依存してないことを確かめてください。 現在の作業対象ディレクトリや環境変数などですね。

  • これなー

  • 共通のDBとかDocker内で使ってると詰むよな

まとめ

#
  • 至極当然のことが書いてあり、それぞれのResultpanic!の処理がわかった
  • このへんは引越しのときにt-wadaさんのYouTube無限にみていたので理解していた
  • それがわかって良かった
  • 次はここ

NO IMAGEテストの実行のされ方を制御する - The Rust Programming Language 日本語版