MvcContrib TestHelper Fluent路线测试和特定HttpVerbs的问题

时间:2010-11-11 17:17:13

标签: asp.net-mvc-2 nunit mvccontrib-testhelper

我正在尝试使用MvcContrib TestHelper流畅的路由测试API,但我看到了奇怪的行为。 .WithMethod(HttpVerb)扩展方法似乎没有按预期执行。这是我的控制器显示(2)接受不同HttpVerbs的动作(同名):

[HttpGet]
public ActionResult IdentifyUser()
{
    return View(new IdentifyUserViewModel());
}

[HttpPost]
public ActionResult IdentifyUser(IdentifyUserInputModel model)
{
    return null;
}

以下是应该使用[HttpPost]属性映射到操作的测试:

MvcApplication.RegisterRoutes(RouteTable.Routes);

var routeData = "~/public/registration/useridentification/identifyuser"
    .WithMethod(HttpVerbs.Post)
    .ShouldMapTo<UserIdentificationController>(x => x.IdentifyUser(null));

即使在我的测试中指定了POST HttpVerb,它总是路由到HttpGet方法。 我甚至可以在我的控制器中注释掉接受HttpPost的操作,但仍然有测试通过!

这里有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

这可能与您如何注册路线有关。我通常会创建一个只执行该操作的类。所以在进行上述任何测试之前,我确保正确设置我的测试夹具。

[TestFixtureSetUp]
public void TestFixtureSetUp()
{
    RouteTable.Routes.Clear();
    new RouteConfigurator().RegisterRoutes(RouteTable.Routes);
}

我的猜测是,由于RouteTable静态处理它们,您可能会遇到问题,要么不添加,不清除,要么在每次测试运行时添加太多路由。