0

我正在研究 Apress 的 Pro ASP.NET MVC 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类型为 anObject以便可以使用任何模型类型。在您的测试中将其转换为您的ViewModel类型对于告诉编译器是什么类型Model是必要的。它相当于:

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