2

我正在尝试使用 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 的动作并且仍然通过测试!

我在这里缺少什么吗?

4

1 回答 1

0

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

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

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

于 2010-11-11T22:39:09.963 回答