23章プロパティベーステスト

コードベースを漏れなくテストするのは不可能だ。ユースケースを賢く絞り込む以上のことはできない。境界条件、コードパス、その他注目すべき箇所を探索し、セーフティネットに大穴が空いていないことを祈るだけだ。しかし、祈るよりも良い方法がある。プロパティベーステストでセーフティネットの穴をふさぐのだ。

この章では、Hypothesis†1というライブラリを使ったプロパティベーステストの方法を学ぶ。まず、Hypothesisを使ってテストケースを生成する。その中には考えもしなかったテストケースが多く含まれる。さらに失敗したテストケースの追跡方法、新しい入力データの作り方、アルゴリズムを組み合わせてソフトウェアをテストする方法を学ぶ。Hypothesisは思いがけないエラーの組み合わせからコードベースを守る。

23.1 Hypothesisによるプロパティベーステスト

プロパティベーステストは生成的テストの一種でありツールがテストケースを生成する。特定の入出力の組み合わせからテストケースを作成する代わりにシステムのプロパティを定義する。ここでのプロパティとはシステムに関する不変式のことである(「10章 クラス」参照)。

総カロリーや価格、料理など顧客が指定した条件に基づいてメニューからコースを選ぶ推薦システムについて考える。この例では顧客が特定のカロリー値を下回るコースを注文できるようにしたい。このシステムのために定義した不変式は次の通りである。

  • 顧客には前菜、サラダ、メインディッシュの3つの料理が提供される。
  • すべての料理のカロリー値の合計が目標カロリー値よりも小さい。 ...

Get ロバストPython ―クリーンで保守しやすいコードを書く now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.