2013-03-27 183 views
0

我通过临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对象的属性:

就是因为像需要这种技术?

回答

1

这只是嵌入方法链简单的铸件。 target.List(int)返回ViewResultViewResult.Model被键入为Object,以便可以使用任何模型类型。在您的测试中将其转换为ViewModel类型有必要告诉编辑器Model是什么类型。这相当于:

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

所以很清楚,我没有做很多对象类型转换(如我的noob关于这样一个基本构造的问题所证明的)。感谢DS的明确答案。它现在非常有意义。 – CBean 2013-03-27 12:45:45