Как проверить представление по умолчанию при использовании T4MVC с MVCContrib.TestHelper AssertViewRendered

StackOverflow https://stackoverflow.com/questions/9310828

Вопрос

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

[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 ''

Но тест проходит, если я переопределяю 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 ''

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

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

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

Предпочтительно я не хочу указывать все представления по имени, так как мне это проверить? Чтобы уточнить, я использую Mvccontrib.mvc3.testhelper-ci 3.0.96.0, который я установил сегодня из Nuget.

ОБНОВИТЬ

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

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);
}
Это было полезно?

Решение

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

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

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);
}

Другие советы

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

Если вы позвонили в VIEW («Индекс»); В своем действии вы можете позвонить .Forview («Индекс») в своем тесте.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top