NUnitでBDD-インナークラス駄目だよね (>_<)

以前コンテキストの重複をインナークラスでリファクタリングするアイデアを紹介したが、実開発においてこれを実践してみるとあまりうまく機能しないことに気付く。これは抽象化の漏れが原因だな。そもそもネストしたコンテキストはオブジェクト指向的に表現することは可能であるとは思うがそれは汎化で表現されるべきである。テスティングフレームワークの性質上の制約上、インナークラスとして実現しようとした事自体がお粗末だったというわけだ。

この失敗から学んだことは、スペックリストのマインドマップのBOIを素直にテストクラスにマッピングした方がうまく行くという事だ。コンテキストの関連性や複雑性をオブジェクト指向的に表現するよりも、それぞれのコンテキストを特化したものとみなして別のテストクラスとした方がいいのではないだろうか。一つのテストクラス内に複数のコンテキストが存在してしまっている場合は、単純にクラスの抽出で別のテストクラスに分離すればよい。

個人的には、振る舞いを先に定義するというBDDの本質に従ってテストを書くだけでもTDDとは相当な差が出るように感じている。NUnitでどうあがいたところで自然言語的に仕様が書けるRSpecには到底及ぶまい。NUnitでうまくやるためにはシンプルが一番だということだろう。

是非、皆さんのご意見をお聞かせ下さい。