Подтвердить что ты не робот

Единичное тестирование asp mvc view

Как я могу unit test просмотреть приложение ASP MVC?

Я попробовал тестовый помощник mvc contrib...

 _controller.Index().AssertViewRendered();

но это фактически не проверяет представление.

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

Есть ли какой-либо установленный способ сделать это? Нужен ли мне макет механизма просмотра? Поддерживает ли mvccontrib это?

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

Спасибо

ИЗМЕНИТЬ То, что мне действительно нужно, - это проверка времени компиляции, чтобы изменения модели не влияли на представление.

В этом вопросе содержатся инструкции, чтобы включить компиляцию представления времени сборки, достаточную для меня сейчас. Компилировать представления в ASP.NET MVC

4b9b3361

Ответ 1

Есть 3 варианта:

  • Вы хотите unit test запрограммировать код в представлении. В этом случае вам нужно переместить код в контроллер, потому что это не ответственность за просмотр этого кода.
  • Вы хотите убедиться, что представление действительно отображается в браузере. Используйте инструмент для проверки пользовательского интерфейса браузера, например waitin или selenium. Это не создает изолированный тест представления, а значительную часть вашего приложения. Это звучит как преимущество, но есть ли какое-либо значение в изолированном тесте просмотра?
  • Вы хотите проверить, что код в вашем представлении является компилируемым кодом. Затем скомпилируйте код. Это можно сделать в unit test, вручную вызов view.compile или включив компилятор представления в процессе сборки.

Ответ 2

Можно проверить ваши представления с помощью unit test с помощью средств тестирования Visual Studio, но только значения, созданные контроллером (например, значения в ViewBag: ViewBag.message = "My message.") или имя визуализированного представления:

[TestMethod]
public void MyActionTest()
{
    // Arrange
    var lController = new HomeController();

    // Act
    var lResult = lController.MyAction() as ViewResult;

    // Assert
    Assert.IsTrue(lResult.ViewBag.message == "My message.", "Wrong Message in Viewbag.");
    Assert.IsTrue(lResult.ViewName == "MyView", "Incorrect view.");
}

Если вы хотите автоматически протестировать весь ваш взгляд на HTML, я рекомендую Selenium IDE как быстрое и простое решение и Selenium Web Driver для кросс-браузерных тестов и экспертов.

Ответ 3

Вы должны посмотреть инструменты веб-тестирования в наборе MS Test или один из нескольких других инструментов веб-тестирования, например Selenium для проверки просмотров, если вам нужны автоматические тесты для них. Я думаю, вам будет легче, чем адаптировать модульную систему тестирования.

Полное раскрытие: я все же проверяю свой интерфейс вручную. Я не нашел достаточной выгоды, чтобы перевесить стоимость обучения, настройки и ведения веб-тестов.

Ответ 4

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

Пока вы можете утверждать, что минимальный тест будет состоять в том, что представление не сбой при исключении, когда мы пытаемся его отобразить, это также будет о единственном unit test, который мы могли бы написать для представления (ASP.NET MVC, WPF, Windows Forms и т.д. - это не имеет большого значения).

Следующее, что вы (или ваш клиент) захотите проверить, - это то, что представление визуализировано правильно, и вы не можете надежно сделать это с помощью автоматизированного теста. Что все это сводится к тому, что Views лучше тестируются Visual Inspection, потому что возврат инвестиций на это просто лучше, чем пытаться разработать и поддерживать автоматические тесты пользовательского интерфейса.

Ответ 5

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

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

Ответ 6

Довольно легко проверить представление на странице ASP.NET MVC.

Я провожу вас шаг за шагом в видео YouTube. Здесь приведен пример необходимых шагов:

  • Вам нужно создать unit test в контроллере. Это позволяет легко вызвать полученный результат. Например:

    public ActionResult TestScenario()
    {
         // setup some models
         return View("Page", model);
    }
    
  • Ваш unit test должен вызвать этот ControllerAction и проверить результат. В утверждении испытаний это будет:

    MvcApprovals.VerifyMvcPage(new MyController().TestScenario);
    

    Все это довольно прямолинейно в ApprovalTests (www.approvaltests.com или nuget).