Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

自動テストを書く

1972年のエッセイ「The Humble Programmer」で、エドガー・W・ダイクストラは「プログラム テストはバグの存在を示すには非常に効果的な方法になりうるが、その不在を示すには 絶望的なまでに不十分である」と述べています。だからといって、できる限り多くを テストしようとしなくてよい、という意味ではありません!

私たちのプログラムにおける 正しさ とは、コードが私たちの意図したとおりのことを 行う度合いのことです。Rust はプログラムの正しさを非常に重視して設計されています が、正しさは複雑であり、証明するのは容易ではありません。Rust の型システムはこの 負担の大部分を担いますが、型システムですべてを捉えられるわけではありません。そ のため、Rust には自動ソフトウェアテストを書くためのサポートが含まれています。

たとえば、渡された数値に 2 を足す関数 add_two を書いたとします。この関数のシグ ネチャは整数を引数として受け取り、結果として整数を返します。その関数を実装してコ ンパイルするとき、Rust はこれまで学んできた型チェックと借用チェックをすべて行い、 たとえばこの関数に String の値や無効な参照を渡していないことを保証します。しか し Rust には、この関数が私たちの意図どおりに正確に動作すること、つまり引数に 10 を足したり 50 を引いたりするのではなく、引数に 2 を足した値を返すことまでは 確認できません。そこでテストの出番です。

たとえば、add_two 関数に 3 を渡したとき、返される値が 5 であることを検証す るテストを書くことができます。コードに変更を加えるたびにこれらのテストを実行すれ ば、既存の正しい振る舞いが変わっていないことを確認できます。

テストは複雑な技能です。良いテストの書き方に関するあらゆる詳細を 1 章で網羅する ことはできませんが、この章では Rust のテスト機能の仕組みについて説明します。テ ストを書くときに利用できるアノテーションやマクロ、テストを実行する際に提供される デフォルトの挙動やオプション、そしてテストをユニットテストと統合テストにどのよう に整理するかについて取り上げます。