【发布时间】:2016-07-13 23:55:13
【问题描述】:
我有一个 MVC 控制器类,我正在尝试对其进行单元测试。
具体的ActionResult是这样的
public ActionResult Create(Shipment newShipment)
{
do some stuff to create a shipmentID
...
return RedirectToAction("AddUnit",newShipment.ShipmentID);
}
我已经模拟了控制器上下文等,现在我想测试传递给 RedirectToAction 调用的 newShipment.ShipmentID 是否符合我的预期。
我有一个测试(在设置阶段有很多模拟)
[Test]
public void CreateSuccess()
{
//Arrange
var shipment = new Shipment();
shipment.Widgets = 2; //Make sure it a valid shipment otherwise
//Act
var result = controller.Create(shipment) as RedirectToRouteResult;
//Assert
Assert.IsNotNull(result);
Assert.AreEqual("AddUnits", result.RouteValues["action"]);
Assert.IsNull(result.RouteValues["controller"]);
...
现在我想找到一个 Assert 来检查我传递给 RedirectToAction 的 shippingID 是否正确。如何检索它的值?
(我相信这段代码确实有效(即实际视图得到正确的shipmentID)但我想编写一个单元测试)。
【问题讨论】:
-
你能改变 Create 函数以通过引用传递参数,如下所示:public ActionResult Create(ref Shipment newShipment)?如果是这样,您可以简单地 Do Assert.IsEqual(shipment.shipmentID, yourvalue);
-
我对 Create 函数的调用方式没有太多控制 - 这是 ASP.NET MVC 及其在实际应用程序中调用 create 的框架。
-
我想我可能弄错了 RedirectToAction 携带参数的能力——我认为它们进入了 TempData。无论如何,最后我重新设计了控制器以返回一个视图。
标签: asp.net-mvc nunit