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是的。謝謝你的指示。 –