2

私が取り組んでいるプロジェクトでは、SpecFlow 1.9.2 でいくつかの機能テストを実装しています。

これらのテストで発生している問題は、ActionResult を ViewResult にキャストしようとすると Null 参照例外が発生することです。ただし、この問題が存在する理由は、コントローラーに次のような 2 つのコード パスがあるためです。

public class CurrentController : Controller
{
    [HttpPost]
    public ActionResult SomeAction(MyModel model)
    {
        if(ModelState.IsValid)
        {
            model.Save();
            return RedirectToAction("SomeOtherAction", "Current");
        }

        // Views will be omitted as they're irrelevant to my question.
        return View(model);
    }

    [HttpGet]
    public ActionResult SomeOtherAction()
    {
        SomeModel model = new SomeModel();
        return View(model);
    }
}

...私の機能テストでは、HTTP ポストを呼び出すステップがあります。

public class MyFeatureTest
{
    private ActionResult _actionResult;
    private ViewResult _viewResult;

    private MyModel _myModel;
    private SomeModel _someModel;

    // SNIP: Other steps unnecessary to this problem description...

    [When(@"I click save on the first action")]
    public void WhenIClickSaveOnTheFirstAction()
    {
        _actionResult = _currentController.SomeAction(_myModel);
        _viewResult = _actionResult as ViewResult;  // Evaluates to null
        _someModel = _viewResult.ViewData.Model as SomeModel;
    }
}

を割り当てようとすると_someModel、NullReference 例外がスローされます。

RedirectToActionこの問題を回避するために、HTTP ポストの呼び出しを の直接呼び出しに変更しようとしましSomeOtherActionたが、これによりサイト エラーが発生しました。

質問: 上で述べたように、私の問題の核心は RedirectToRouteResult が ViewResult ではないということです。機能テストのコンテキストで、RedirectToRouteResult を解決してコントローラーに適切な ViewResult を生成させるには、どのような方法がありますか?

4

1 に答える 1