我正在尝试使用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的操作,但仍然有测试通过!
这里有什么我想念的吗?
答案 0 :(得分:0)
这可能与您如何注册路线有关。我通常会创建一个只执行该操作的类。所以在进行上述任何测试之前,我确保正确设置我的测试夹具。
[TestFixtureSetUp]
public void TestFixtureSetUp()
{
RouteTable.Routes.Clear();
new RouteConfigurator().RegisterRoutes(RouteTable.Routes);
}
我的猜测是,由于RouteTable静态处理它们,您可能会遇到问题,要么不添加,不清除,要么在每次测试运行时添加太多路由。