読者です 読者をやめる 読者になる 読者になる

miso_soup3 Blog

主に ASP.NET 関連について書いています。

カスタムセレクターの 作成 と テスト

メモ ASP.NET MVC TDD

カスタムセレクターの作り方

例えば

あるキーのパラメータが存在する場合のみ、
アクションメソッドの選択を有効とする、独自のセレクターを作るとします。
RequiredParameterです。

属性クラスを作成する

アクションメソッドの選択を制御する場合は、
System.Web.Mvc空間のActionMethodSelectorクラスを継承し、
IsValidForRequestメソッドをオーバーライドすることで
独自のセレクターを作成することができます。

この、引数のcontrollerContextと、MethodInfoからは、
QueryStringの値や、フォーム送信データ、ルートデータ、
今選択するかどうかを検証しようとしているメソッド名など、
様々な情報が取得できます。

今回は、
ここからQueryStringやフォーム送信データを取得したいと思います。

テスト

独自セレクターのテストは、こんな感じになりました。

「QueryStringがこんな値だった場合は、こんな結果になるはず・・・」
といったテストを書いていきます。

モックでテストの準備をする

前提条件である「QueryStringがこんな値だった場合は…」を再現するには、
Moqライブラリを使用し、ControllerContextのモックを作成する必要があります。

MVCのソースをのぞき、ControllerContextがどのように
QueryStringを返しているのか覗きます。

覗いて、↓なモックと、実物のコレクションを用意しました。

前提条件を作るには、例えばこんなメソッドを用意します。↓

以上で、先程挙げたような、セレクターのテストを書くことができます。

おまけ

実装内容はこんな感じです。

おしまい

適当な説明ですが、このような感じで、セレクターのテスト・実装を
書くことができます。

なにこれー!ControllerContextの中は複雑やー!テストできんわー!

…なんて、昔の話です。