前回の2つの記事では、NaturalSpec を紹介し、使用方法を示した。今回は NaturalSpec を使用して C# プロジェクトの自動テスト可能なシナリオを記述する方法を示す。"最初にテストを書く" TDD の原則のように、私たちはスペックを初めに書き、"Red-Green-Refactor" のサイクルに身を委ねる。
"Red" – 失敗するシナリオのスペックを作成する
まずは、"Spec.CarSelling" という F# のクラスライブラリプロジェクトを作成し、プロジェクトの参照に NaturalSpec.dll と nunit.framework.dll を追加した (詳細は "NaturalSpec 入門" を参照してほしい)。
ここで最初のシナリオを書ける。
この段階でシナリオの準備が整っているが、コンパイルされていない。これは "Red" の段階の準備が整ったことを意味する。
"Green" – テストが通るパスを作成する
テストをグリーンにするために、"CarSellingLib" という C# のクラスライブラリを作成し、CarType という列挙体と Dealer、それに Car というクラスを定義する。YAGNI 原則にこだわって、スペックをグリーンにするためだけの最小の実装を行う (出力機能のために ToString メソッドも合わせて)。
スペックプロジェクトにプロジェクト参照を追加したら、そのユニットテストが通るだろう。これで "Green" ステップが完了する (スペックを実行する方法がわからなければ、"NaturalSpec 入門" を参照してほしい)。スペックが "Green" になったため、もっとシナリオを追加できる。
再び "Red" のフェーズにきた。
"リファクタリング" - 重複を排除し、パターンに従うようにコードを修正する
"Green" のスペックを作成したあと、いくつかのリファクタリングを行うと、プロジェクトコードはこのようになる。
スペックの出力は以下のとおり。
まとめ
NaturalSpec を使用して C# プロジェクトを "Red-Green-Refactor" サイクルで開発する方法を示した。この方法で簡単に自然言語でのスペックを取得できる。