2009-06-09 3 views
4

Я хочу написать единичный тест, чтобы убедиться, что я вернусь, является правильным.Как проверить ASP.Net MVC View?

Мой плана должен написать тест, который первый вызывающий контроллер, а затем вызывает метод ActionResult я планирую проверить я думал, что я мог бы написать что-то вроде

Controller controller = new HomeController(); 
var actionresult = controller.Index(); 
Assert.False(actionresult.ToString(), String.Empty); 

, который затем позволит мне разобрать ActionResult для тестового значения. Однако я не могу напрямую создать метод public ActionResult Index().

Как это сделать?

+0

«Однако я не могу напрямую создать экземпляр общедоступного метода ActionResult Index()»? Можете ли вы объяснить, почему? –

+0

Что вы имеете в виду, вы не можете напрямую создать метод? –

+0

Я имел в виду, что набрал «контроллер». и Index не будет отображаться как один из методов, которые я мог бы создать. – Nissan

ответ

1

Вот пример из Профессионального ASP.NET MVC 1.0 (книга):


[TestMethod] 
public void AboutReturnsAboutView() 
{ 
    HomeController controller = new HomeController(); 
    ViewResult result = controller.About() as ViewResult; 

    Assert.AreEqual("About", result.ViewName); 
} 

Обратите внимание, что это не сработает, если вы не вернете явный вид в методе контроллера, т.е. сделать это :


    Return(View("About")); 

не так:


    Return(View()); 

Или тест не пройдет. Это нужно сделать только в том случае, если ваш метод когда-либо будет возвращать более одного представления, иначе вы должны возвращать неявное представление в любом случае и не пытаться проверить структуру.

+1

Тестирование вашего кода, оно должно быть ViewResult result = controller.About() as ViewResult; no 's', но пока это хорошо. Приведет этот ответ как правильный, если он будет работать, когда я закончу – Nissan

+0

Да, извините, это была опечатка. Трудно скопировать и вставить из реальной книги :) –

4

Тестовые помощники в MVCContrib помогут вам здесь.

ViewResult result = controller.Index().AssertViewRendered().ForView("Blah"); 
Смежные вопросы