すもぎのめも

いろいろあったことをメモしています

NaturalSpec とモックオブジェクト

前回の投稿では、NaturalSpec手引きとして、開始手順と、NaturalSpec を使用した C# プロジェクトの自動テスト可能なシナリオの記述の仕方を示した。今回は、前回と同じ ”Car-Dealer” サンプルを使用して、NaturalSpec でモックオブジェクトを利用する。

モックオブジェクトは、テスト駆動開発(TDD)で重要なテクニックの1つであり、複雑な振る舞いのシミュレートを可能にする。


もしオブジェクトが次に示す特性のうち、どれか一つでも備えているのであれば、その場所にモックオブジェクトを使うと便利かもしれない。

  • 非決定的な結果を提供している (例:現在の時刻や温度)
  • 生成、または再現するのが難しい状態値を持つ(例:ネットワークエラー)
  • 遅い(例:テストの前に初期化を必要とする完全なデータベース)
  • まだ存在していないか、振る舞いを変更できる
  • テストの目的のために情報やメソッドが含まれていなければならない

 


サンプルでは、Dealer.SellCar() メソッドをモックとしたい。最初のステップは Dealer 用の C# インターフェイスを作成することだ。

NaturalSpec は基盤となるモックフレームワークとして Rhino.Mocks を使用しているため、スペックライブラリに Rhino.Mocks.dll への参照を追加しなければならない。

これでスペックを修正できる。

ご覧のとおり、(具象 Dealer の代わりにモックされた IDealer インターフェイスを取得するために)パート4を変更した。パート7では、モックに振る舞いを登録した。

私たちは、Bert.SellCar が引数に30000を指定して呼び出されるたびに、夢の車を戻り値とするようなそれを希望している。
もしモックされた関数が呼び出されたのなら、Verify 関数は確認を行う。
そのシナリオは失敗しないだろう。

NUnit runner でスペックを確認すると、次のように出力される。