私が取り組んでいるプロジェクトでは、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 を生成させるには、どのような方法がありますか?