Navigationは、CRUDロジックをコードビハインドファイルから移動することによって、ASP.NET Webフォームをよりテスト可能にするライブラリである。Graham Mendick氏の記事“Navigationのユニットテスト”では、いくつかの機能の紹介と、どのようにユニットテストを書くことができるかを紹介している。
このライブラリでなにができるのか?
- 分離クラスのコントローラメソッドとバインドするコントロール
- ナビゲーションバインディング
aspxページのマークアップにすべて含められる。たとえば、FormViewとコントローラメソッドをバインディングする場合、このように記述する -
<asp:FormView ID="Question" runat="server" DataSourceID="QuestionDataSource" DefaultMode="Edit">
<EditItemTemplate>
</EditItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="QuestionDataSource" runat="server" SelectMethod="GetQuestion" UpdateMethod="UpdateQuestion" TypeName="Survey.SurveyController" DataObjectTypeName="Survey.Question" />
GetQuestionとUpdateQuestionはコントローラメソッドで、SurveyControllerという外部クラスに実装されている–これらはコントロールに直接アクセスできず、Navigationライブラリにデータをパスする。Survey.Questionは、この例ではデータを転送するViewModelを参照する。
なぜこれがユニットテストをシンプルにするのか?なぜなら、ビジネスロジックはPOCOクラスに分離され、Web固有の振る舞いが含まれていない。そして、テストはより簡単になる。詳細はこの記事を見て欲しい。
すでにInfoQで報じたとおり、WebForms 4.5のモデルバインダーが使えるようになるが、このライブラリはコードビハインドファイルではなく分離クラスのコントローラメソッドに置かれ、よりテスト容易性と再利用性が高い。興味があるなら、 Navigation NerdDinner walkthroughをダウンロードすることができる。