Как проверить представление по умолчанию при использовании T4MVC с MVCContrib.TestHelper AssertViewRendered
-
26-10-2019 - |
Вопрос
Я использую 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 («Индекс») в своем тесте.
Я думаю, что это утверждение было бы наиболее полезным, если бы ваше действие могло вернуть разные возможные представления.