世界のやまさ

SEKAI NO YAMASA

TDDBC_仙台02の課題をC#で素振り(ステップ0 〜 1まで)

TDDBC_仙台02の課題大阪 と同じです。「TDDBC C#」でぐぐると TDDBC大阪の課題をC#でやってみる ~ クラス設計とTDD という @biac さんの素晴らしい記事が既にあるのでやる意味が無い感じですが、自分なりに解いてみるのもいい勉強になるかなと思ってやってみました。
以降、何回かに分けて課題を進めます。
ASP.NET MVC4 を使用していますので、最終的には AppHarbor とかに公開して動くアプリにしたいと思います。

開発環境

WIndows 8 Release Preview
Visual Studio 2012 RC Professional(多分 Express でもOK)
Team Foundation Service (TFS Preview)
ASP.NET MVC4
MSTest
Chaining Assertion

まえおき

Windows 8 を使用していますが、、、

XP でも同じことが出来ます。たまたま自分の環境が Windows 8 だったというだけです。

TFS Preview って?

ソース管理+BTSです。git ではなく、VS と相性のいい TFS Preview を使いました。今は無償で TFS 同等の機能を利用できるので使いまくればいいと思います。
こんな感じでタスクを管理していました。
f:id:nnasaki:20120821012303j:plain

MSTest って?

VS に統合されている MS 謹製のテスティングフレームワークです。CTRL+R,Aのツーストロークでテストが実行でき、今の範囲のテストは 17ms で終わるのでほぼ一瞬です。全くストレスは感じません。
しかしながら、NUnit と比べると機能が見劣りするので後述する Chaining Assertion で機能補完しています。

Chaining Assertion って?

Chaining Assertion は Nuget コンソールから 「Install-Package ChainingAssertion」でインストールできます。
特徴として、以下があります

  • 対象のメソッドの後に直接 Is(expected) を付けてテストできる。
  • TestCase属性を付けてパラメタライズテストができる。
  • AsDynamic() を使用して private メソッド/プロパティ/フィールド をテストできる。
  • 例外も比較的簡単にテストできる。

作者は neue cc - C#(.NET)のテストフレームワーク4種の比較雑感NUnit で書いている通り Hamcrest が嫌いなようなので、AssertThat は使わず、c# の拡張メソッドを使用するようにしたようです。
私も c# でやるならこれがベストだと考えています。

実装したコード(gist貼りつけ)