2012-02-16 3 views
3

Я использую T4MVC в моем проекте ASP.NET MVC 3. У меня есть следующий базовый тест:Как проверить представление по умолчанию при использовании T4MVC с MvcContrib.TestHelper AssertViewRendered

[TestMethod] 
public void IndexReturnsIndexView() 
{ 
    var controller = new HomeController(); 
    var result = controller.Index(); 

    result.AssertViewRendered().ForView(MVC.Home.Views.Index); 
} 

тест завершается неудачей, если метод контроллера возвращает вид по умолчанию:

public virtual ActionResult Index() 
{ 
    return View(); 
} 

Ошибка Предоставленная:

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name '~/Views/Home/Index.cshtml', actual was '' 

Но тест проходит, если I переопределить View, чтобы указать, какие viewName для возврата:

public virtual ActionResult Index() 
{ 
    return View(MVC.Home.Views.Index); 
} 

Я попытался использовать следующее утверждение, но все-таки не повезло: поднимается

result.AssertViewRendered().ForView(MVC.Home.Index().GetT4MVCResult().Action); 

следующая ошибка:

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name 'Index', actual was '' 

Я тогда понял, что я неправильно интерпретировал провал утверждение, поэтому я изменил test:

result.AssertViewRendered().ForView(String.Empty); 

Тест проходит, но сам тест кажется бесполезным.

Желательно, чтобы я не хотел указывать все виды по имени, так как я могу проверить это? Чтобы уточнить, я использую MvcContrib.Mvc3.TestHelper-ci 3.0.96.0, который я установил сегодня из NuGet.

UPDATE

Это не ответ на вопрос, но я начал делать следующий вместо этого, который обеспечивает большую ценность в качестве тестового примера:

using (var controller = new FeatureController(mockGateway)) 
{ 
    // Act 
    var result = controller.Index(); 
    var model = result.ViewData.Model as MyModel; 

    // Assert 
    Assert.IsNotNull(model, "Model is null or wrong type"); 
    result.AssertViewRendered().WithViewData<MyModel>(); 

    // Alternative Assert for model data 
    Assert.IsTrue(model.Items.Count > 0); 
} 

ответ

0

Я оставил это открытым для значительное количество времени, чтобы кто-либо еще мог ответить, если они захотят. Я сейчас отвечу на это.

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

using (var controller = new FeatureController(mockGateway)) 
{ 
    // Act 
    var result = controller.Index(); 
    var model = result.ViewData.Model as MyModel; 

    // Assert 
    Assert.IsNotNull(model, "Model is null or wrong type"); 
    result.AssertViewRendered().WithViewData<MyModel>(); 

    // Alternative Assert for model data 
    Assert.IsTrue(model.Items.Count > 0); 
} 
0

AssertViewRendered(). ForView() тесты против названия вида, что вы явно передаете вид() Ваше действие контроллера. Если, как вы делаете, вы не указываете имя вида в своем действии, тогда .ForView() будет тестировать пустую строку, как вы видели.

Если вы вызвали View («Index»); в вашем действии вы могли бы вызвать .ForView («Индекс») в своем тесте.

Я бы подумал, что это утверждение было бы наиболее полезным, если бы ваше действие могло возвращать различные возможные виды.

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

  • Нет связанных вопросов^_^