私はいくつかの単体テストを書いています。条件が true の場合、コントローラー アクションは を返しHttpNotFoundResult
、それ以外の場合は を返し、ViewResult
その中に特定のモデルを含める必要があります。
テストの 1 つ ( を返すシナリオのテストViewResult
) として、アクションを実行し、結果を にキャストしてみViewResult
ます。ただし、var result = myController.MyAction() as ViewResult
( where result
is 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