модульное тестирование asp mvc view - PullRequest
20 голосов
/ 23 февраля 2010

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

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

 _controller.Index().AssertViewRendered();

но на самом деле это не проверяет вид.

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

Есть ли какой-нибудь установленный способ сделать это? Нужен ли мне макет двигателя представления? Mvccontrib обслуживает это?

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

Спасибо

EDIT Что мне действительно нужно, так это проверка времени компиляции, чтобы убедиться, что изменения модели не влияют на представление.

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

Ответы [ 6 ]

15 голосов
/ 23 февраля 2010

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

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

Можно протестировать ваши представления с помощью модульного теста, используя Visual Studio Test Tools, но только значения, созданные контроллером (например, значения в 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 голосов
/ 23 февраля 2010

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

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

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

2 голосов
/ 23 февраля 2010

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

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

0 голосов
/ 08 мая 2012

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

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

  1. Вам необходимо создать модульный тест в контроллере . Это позволяет легко вызвать отображаемый результат. Например:

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

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

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

0 голосов
/ 23 февраля 2010

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

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

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