2013-03-27 182 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