1
我有一个ASP.NET MVC 5控制器用下面return语句:如何获取传递给RedirectToAction进行单元测试的模型?
return RedirectToAction("SendEmail",message);
其中消息是消息类型的一个对象。我想单元测试这个控制器是否适当地返回消息对象,而不仅仅是它返回到SendEmail操作(我已经写了测试成功)。
如何检查控制器是否正确地将Message对象作为参数返回给RedirectToAction?我无法得到它通过简单的尝试:
var result = controller.Save(mockMessage) as RedirectToRouteResult;
//Assert
Assert.IsInstanceOf<Message>(result.RouteValues);
我熟悉RouteValues [“行动”]和RouteValues [“控制器”],但我不知道如何来检查模型,结果。 RouteValues [“model”]不能以这种方式工作。
全部控制器代码:
public ActionResult Save([Bind(Exclude = "Id")] Message message)
{
if (!ModelState.IsValid)
{
var viewModel = new MessageViewModel(message);
return View("index",viewModel);
}
message.TimeStamp = DateTime.UtcNow;
_messageRepository.Add(message);
return RedirectToAction("SendEmail",message);
}
“RedirectToAction”的第二个参数在内部转换为“RouteValueDictionary”。它接受'object'的唯一原因是让你以一种方便的'new {k = v}'格式定义路由选择值。我不认为你的'Message'可以转换为'RouteValueDictionary',它最终会成为一个'RouteValueDictionary',它对应于'Message'的属性名和值。 – haim770
Save方法是POST请求吗?因为RedirectToAction会产生一个GET请求。 –
@AndriyTolstoy是的。谢谢你的指示。 –