Unit testing 单元测试MVC4重定向操作

Unit testing 单元测试MVC4重定向操作,unit-testing,asp.net-mvc-4,asp.net-4.5,Unit Testing,Asp.net Mvc 4,Asp.net 4.5,我试图在MVC4.NET4.5中对控制器的重定向进行单元测试。以下是一个例子: [TestMethod] 公共无效寄存器\u PassValidModel\u重定向到HomeIndexShouldbetrue() { //安排 var registerModel=新的registerModel { 电子邮件=”validEmailAddress@domain.com", Password=“Password” }; //分配 var result=_controller.Register(reg

我试图在MVC4.NET4.5中对控制器的重定向进行单元测试。以下是一个例子:

[TestMethod]
公共无效寄存器\u PassValidModel\u重定向到HomeIndexShouldbetrue()
{
//安排
var registerModel=新的registerModel
{
电子邮件=”validEmailAddress@domain.com",
Password=“Password”
};
//分配
var result=_controller.Register(registerModel)作为RedirectToRouteResult;
//断言
结果。路由值[“操作”]。应为相等(“索引”);
结果。路由值[“控制器”]。应为相等(“主”);
}
这是控制器:

[HttpPost]
公共操作结果寄存器(RegisterModel模型)
{
if(ModelState.IsValid)
{
var userToRegister=新用户{Email=model.Email,Password=model.Password};
var service=newuserservice(_userRepository);
User=service.RegisterUser(userToRegister);
if(user.UserErrorMessages.Count!=0)
{
UserErrorMessages.ForEach(x=>ModelState.AddModelError(“,x));
返回视图(模型);
}
SetCookie(model.Email);
返回重定向到操作(“索引”、“主页”);
}
返回视图(模型);
}
单元测试中变量
result
的问题是
null
。我从一个从事MVC2项目的人那里找到了这段代码,它似乎对他很有用。MVC4有什么变化吗


提前谢谢

试试这个,希望对你有用

 var result= (RedirectToRouteResult)controller.Register(registrModel);

           result.RouteValues["action"].Equals("Index");
           result.RouteValues["controller"].Equals("Home");

           Assert.AreEqual("Index", action.RouteValues["action"]);
           Assert.AreEqual("Home", action.RouteValues["controller"]);

您确定操作实际返回RedirectToAction(“索引”、“主目录”)吗?寄存器操作中应该有一些逻辑。如果它返回任何其他类型的结果,并且您尝试将其作为RedirectToRouteResult,那么您将得到null。尝试时,我得到了一个RedirectToRouteResult对象。你确定你的控制器看起来就是这样吗?我想你可能会得到一个ViewResult。这应该被标记为正确答案。还有一个副本对我有用。但是必须更改Assert.AreEqual(“Index”,action.RouteValues[“action”]);断言.AreEqual(“Index”,result.routeValue[“action”]);-和遗漏的结果。RouteValues[“action”]。等于(“Index”);