miso_soup3 Blog

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

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

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

例えば

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

属性クラスを作成する

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

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

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

テスト

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

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

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

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

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

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

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

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

おまけ

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

おしまい

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

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

…なんて、昔の話です。