在我的 Asp.net MVC 应用程序中,我在控制器上有两种方法,一种用于用户第一次到达视图时,另一种用于用户在所述视图上提交表单时。
public ActionResult Foo() {}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Foo(string id, Account accountToFoo) {}
在第二个操作中,有一个自定义模型绑定器正在组装我正在操作的帐户对象,尽管这实际上并不重要。这在服务器本地测试中一切正常。
我们尝试很好地编写单元测试来测试所有不同的视图是否正确路由到,包括 HTTP POST 的视图。为此,我们一直在使用 mvccontrib 的测试助手。
测试变得非常简单
"~/account/foo/myusername".
Route().
ShouldMapTo<AccountController>(c => c.Foo("myusername"));
我的问题是在测试 POST 路由时,如何编写 lambda 来验证帖子是否接收到准确的值,类似于上面的 GET 测试?
对于 POST,它看起来像:
"~/account/foo".
WithMethod(HttpVerbs.Post).
ShouldMapTo<AccountController>(a => something_something);
这是我的 lambda 的 some_something 部分,我遇到了麻烦。使用任意值不起作用(“a => a.Foo(0, new Account()”)。我如何指定预期值作为测试的一部分?
EDIT我希望有类似于 Moq 对 foo.Setup(s => s.Foo(It.IsAny(), It.Is(i => i > 32)) 等语句的 lambda 表达式的方式。即使我必须显式地提供这些值,这也是可行的——我似乎无法理解所需的结构来传递这些显式值。