2013-03-27 3 views
0

Я работаю через 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 объекта, переданного в представление?

ответ

1

Это просто литье, встроенное в цепочку методов. target.List(int) возвращает ViewResult. ViewResult.Model набирается как Object, так что можно использовать любой тип модели. Приведение его к вашему типу ViewModel в вашем тесте необходимо рассказать компилятору, какой тип Model есть. Это эквивалент:

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

Так ясно, что я не делал много отличного типа объектов (о чем свидетельствует мой вопрос о нобе о такой базовой конструкции). Спасибо за четкий ответ DS. Теперь это имеет смысл. – CBean

Смежные вопросы