1

ユニットテストしようとしている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"]);
        ...

そして今、私がRedirectToActionに渡すshipmentIDが正しいものであることを確認するためのアサーションを見つけたいと思います。その値を取得するにはどうすればよいですか?

(このコードは実際に機能すると思います(つまり、実際のビューは正しいshipmentIDを取得します)が、単体テストを作成したいと思います)。

4

2 に答える 2

3

実際、RedirectToActions はパラメーターを取ることができます。以下は、正しいパラメーターをテストする方法の簡単な例です。ここでは NUnit と FluentAssertions を使用しています。

[HttpPost]        
public ActionResult RedirectMethod()
{
     return RedirectToAction("Index", "Home", new { parameter = "Value" });
}

そしてテスト:

[Test]
public void RedirectSetsExpectedParameters()
{
    var result = controller.RedirectMethod();
    var redirectResult = result.As<RedirectToRouteResult>();

    var expectedRedirectValues = new RouteValueDictionary
        {
            { "parameter", "Value" },
            { "action", "Index" },
            { "controller", "Home" }
        };

    redirectResult
       .RouteValues
       .ShouldBeEquivalentTo(expectedRedirectValues, 
       "The redirect should look as I expect, including the parameters");
}
于 2016-07-13T15:55:13.587 に答える