私の Asp.net MVC アプリでは、コントローラーに 2 つのメソッドがあります。1 つはユーザーが最初にビューに到着したとき、もう 1 つはビューでフォームを送信したときです。
public ActionResult Foo() {}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Foo(string id, Account accountToFoo) {}
2 番目のアクションには、私が操作しているアカウント オブジェクトを組み立てるカスタム モデル バインダーがありますが、これは実際には重要ではありません。これはすべて、サーバー上でローカルにテストする際にうまく機能します。
HTTP POST のビューを含め、さまざまなビューが適切にルーティングされていることをテストするための単体テストを作成することについては、かなりうまくいくように努めています。そのために、mvccontrib のテスト ヘルパーを使用してきました。
取得のテストは非常に簡単です
"~/account/foo/myusername".
Route().
ShouldMapTo<AccountController>(c => c.Foo("myusername"));
私の質問は、POST ルートのテストです。上記の GET テストと同様に、ポストが正確な値を受け取っていることを確認するために使用するラムダをどのように記述すればよいですか?
POST の場合、次のようになります。
"~/account/foo".
WithMethod(HttpVerbs.Post).
ShouldMapTo<AccountController>(a => something_something);
私が問題を抱えているのは、ラムダの something_something 部分です。任意の値を使用しても機能しません ("a => a.Foo(0, new Account()")。テストの一部として期待される値を指定するにはどうすればよいですか?
編集 Moq が foo.Setup(s => s.Foo(It.IsAny(), It.Is(i => i > 32)) などのステートメントのラムダを持つ方法に似たものがあることを望んでいました値を明示的に指定する必要がありますが、それは実行可能です-明示的な値を渡すために必要な構造を理解できないようです。