時間とテスト

前、ちょっと悩んだ問題を思い出した。


課題:日付によって、YYYYMMDD_HHmmssというファイルを作るテストを行いたい。
問題点:現在時間を直接取得すると、テストが難しくなる。
回答:フェイクを使う(現在の日時を使用するような処理のテスト - 気楽に諸々)


モックはよく聞くんだけど、フェイクって言葉はあまり聞かない気がする。
見つかった部分だと、こんな感じ。

・フェイクオブジェクトは、実際に動作するように実装されてはいるが、手抜きされているので製品版には向かない(InMemoryDatabaseが良い例である)。
・スタブは、テスト時の呼び出しに対して、あらかじめ用意された結果を返す。通常、テスト用にプログラムされたところ以外には応答しない。スタブは呼び出しの情報を記録することもある。例えば、Eメールゲートウェイスタブは「送られた」メッセージを記録するような場合だ。単に「送られた」メールの数を記録する場合もあるだろう。
・モックは、エクスペクテーションが事前にプログラムされたものである。エクスペクテーションとは、受信する一連の呼び出しの仕様を表わしたものである。期待されない呼び出しが行なわれた場合は例外をスローする。また、テスト実行後の検証 (verification)で、期待された呼び出しがすべてきちんと行われたかどうかを確認する。

引用:http://capsctrl.que.jp/kdmsnr/wiki/bliki/?TestDouble

この説明だと、意味のある値を返すものがスタブで、意味のない値(TDDにおいて必ず失敗する値など)を返すものがフェイクになるのだろうか?
ちょっと定義が微妙だなぁ……
カプセル化のごとく定義がはっきりしていないのかしら、この辺り。


Special Thanks : id:bleis-tift