3

私はいくつかの単体テストを書いています。条件が true の場合、コントローラー アクションは を返しHttpNotFoundResult、それ以外の場合は を返し、ViewResultその中に特定のモデルを含める必要があります。

テストの 1 つ ( を返すシナリオのテストViewResult) として、アクションを実行し、結果を にキャストしてみViewResultます。ただし、var result = myController.MyAction() as ViewResult( where resultis an ActionResult) を使用すると、result常に null に評価されます...しかし、実行するvar result = (ViewResult)myController.MyAction()と、結果はうまくキャストされます。

どうしてこれなの?の使い方がよくわからないのasですが?

関連コード:

// My controller
public class MyController
{
  .. 
  public ActionResult MyAction(bool condition)
  {
      if(condition)
         return HttpNotFound()
      return View(new object());
  }
}

// My test
public void MyTest()
{
  ....
  var controller = new MyController();
  var result = controller.MyAction(false) as ViewResult;
  // result should be casted successfully by as, but it's not, instead it's unll
  // however, this works
  var result = (ViewResult) controller.MyAction(false);
  // why is this?
}

編集:要点を含む完全な例。申し訳ありませんが、構文の強調表示が気に入らないようです。 https://gist.github.com/DanPantry/dcd1d55651d220835899

4

1 に答える 1