検定フレームワークを使う
TestCreateは検定を作成するだけですぐに実行はしない:
検定を実行するためには,TestEvaluateを使う:
TestCreateは実際の検定を実行しないので,検定の作成はすぐにできる:
長い検定をスピードアップするためにはParallelMapが使える:
このセクションではTestCreateとVerificationTestの主な違いを見てみる.可能な限り検定はTestCreateを使って定義した方がよい.作成と評価を分けることで,次のようないくつかの機能が利用できる:
TestCreateを使って検定を作成する場合,入力式に含まれるシンボルはどれも評価されない.次の検定を見てみる:
大域的な依存性を避けるために,With等を使って検定に静的値を挿入することができる:
IntermediateTestが失敗すると外部検定も失敗するので,検定についての全体的な結果1つ得られる.外部検定内のIntermediateTestの結果を調べると,外部検定のどのステップが成功してどれが失敗したかが分かる.
TestReportはいくつもの目的を果たす1つの関数である.
TestReportを使って検定を実行する
TestReportは複数の検定を実行するために使うことができる:
TestReportを使って検定結果を結合する
結果を結合すると,TestReportは自動的に重複したものを削除する:
TestReportを使って評価せずに検定を集める
ファイル上でTestReportを実行すると,評価されていない検定がデフォルトではすべて評価される:
IdentityをTestEvaluationFunctionとして使うことによって,TestReportに検定を収集するだけで評価はしないよう指示することができる.検定は実行していないのでこの操作はずっと速い:
HoldFormを解放することで検定オブジェクトを再構築することができる:
TestReportが行っていることのロギングはコードをデバッグするために必須のことである.実行中のある点で失敗する可能性のある長い検定一式を生成する:
失敗している検定すべてをリアルタイムでログするためにはHandlerFunctionsを使うことができる:
TestReportの検定ファイルを書くことは,通常単純な操作である.検定ファイルの最初で必要なコンテキストをロードするだけである:
Needs["MyContext`"]
TestCreate[MyContext`AddOne[1], 2, TestID -> "MyContext-AddOne-Test"]
TestCreate[MyContext`AddTwo[1], 3, TestID -> "MyContext-AddTwo-Test"]
TestCreateに含まれないコードはすべて,検定を実行していないとしても検定ファイルがロードされたときに毎回実行される.検定ファイルは検定のリスト,またはプログラムで検定を作成する式を含むことができる:
Needs["MyContext`"]
Table[
TestCreate[
MyContext`AddOne[i],
i+1,
TestID-> "MyContext-AddOne-" <> IntegerString[i]
],
{i, 1, 20}
]
それぞれの検定に意味のあるTestIDを割り当てておくとよい.