0

私はApressのProASP.NETMVC 4を使用しており、特定のコントローラーメソッドの単体テストで使用される構文を理解しようとしています。

クラスのコントローラーメソッドが与えられた場合SomeController

public ViewResult List(int someInt) {

  ViewModel model = new ViewModel {
    ModelObject = new ModelObject {
      ObjectProperty = someInt;
    }
  }

  return View(model);
}

単体テストは次のようになります。

[test method]
Some_Test () {

   //...some code here to set up a mock object named 'mock'

   SomeController target = new SomeController(mock.Object);

   //This next line is where the syntax is confusing me
   int result = ((ViewModel)target.List(1).Model).ModelObject.ObjectProperty;

   Assert.AreEqual(result, 1);
}

それは、タイプか何かViewResult.Modelとして「キャスト」のようなものでなければならないようなものです。ViewModelこの構文/テクニックには名前があると思います。ここで何が起こっているのかについてもっと知りたいと思います。

このテクニックは次のような理由で必要ですか?

 int result = target.List(1).Model.ModelObject.ObjectProperty;

modelビューに渡されたオブジェクトのプロパティにアクセスできるように機能しませんか?

4

1 に答える 1

1

これは、メソッドチェーンに埋め込まれた単純なキャストです。 target.List(int)を返しますViewResultViewResult.Modelはとして入力されるObjectため、任意のモデルタイプを使用できます。あなたのテストであなたのタイプにそれをキャストすることViewModelは、compiilerにタイプが何であるかを伝えるために必要Modelです。これは、次と同等です。

ViewModel model = (ViewModel)target.List(1).Model;
int result = model.ModelObject.ObjectProperty;
于 2013-03-27T02:04:42.617 に答える