单元测试控制器方法属性

时间:2013-03-27 01:56:17

标签: c# unit-testing casting controller viewresult

我正在使用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必须像'{1}}类型一样'强制转换'。我确信这个语法/技术有一个名称,我想更多地了解这里发生了什么。

这种技术是否需要,因为:

ViewModel

无法访问传递给视图的 int result = target.List(1).Model.ModelObject.ObjectProperty; 对象的属性?

1 个答案:

答案 0 :(得分:1)

这只是嵌入到方法链中的简单转换。 target.List(int)会返回ViewResultViewResult.Model被输入为Object,因此可以使用任何模型类型。在测试中将其转换为ViewModel类型是必要的,以告诉compiiler Model是什么类型。它相当于:

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