单元测试控制器方法属性

本文关键字:属性 方法 控制器 单元测试 | 更新日期: 2023-09-27 18:05:57

我正在使用Pro ASP。. NET MVC 4由Apress和我试图理解单元测试中使用的特定控制器方法的语法。

给定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对象的属性?

单元测试控制器方法属性

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

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