интеграционный тест asp.net mvc - PullRequest
1 голос
/ 08 июля 2010

Привет, я делаю TDD для проекта asp.net mvc, мне нужно иметь возможность провести сквозное тестирование для отправки запроса к действию контроллера вплоть до хранилища.Я попытался использовать код здесь , но, к сожалению, я не могу запустить его, и у меня заканчивается время, кто-нибудь знает какой-либо другой способ подделать запрос http и заполнить параметры сообщения запроса втестовый сценарий?

Мое действие контроллера выглядит следующим образом:

[HttpPost]
public ActionResult CreateUser(User user)
{
}

Поэтому мне нужно выполнить запрос http для заполнения этого объекта User и, надеюсь, сохранить его в тестовом репозитории.

Ответы [ 3 ]

5 голосов
/ 08 июля 2010

Когда вы разместите ссылку, я возьму выдержку из блога Стива Сандерсона:

Интеграционные тесты проверяют работу всего стека программного обеспечения.Эти тесты ничего не фальсифицируют и не фальсифицируют (они используют реальную базу данных и реальные сетевые соединения) и хорошо обнаруживают, если ваши тестируемые модулем компоненты не работают вместе, как вы ожидали.В целом, лучше всего приложить максимум усилий для создания надежного набора модульных тестов, а затем добавить несколько интеграционных тестов для каждой основной функции, чтобы вы могли обнаружить любые катастрофические несовместимости или ошибки конфигурации, прежде чем ваши клиенты это сделают.1005 *

На этом этапе не следует подделывать HTTP-запросы, так как интеграционный тест по отдельности проверяет все компоненты вместе.

Попробуйте использовать некоторый тип инфраструктуры автоматизации браузера:

0 голосов
/ 02 августа 2012

Вы также можете взглянуть на структуру Verde. Семантически тесты выглядят аналогично MvcIntegrationTestFramework Стива Сандерсона, с ключевым отличием в том, что Verde выполняет тесты в контексте вашего фактического домена приложений IIS (через браузерный тестовый прогон), а не программно созданным. Это дает пару преимуществ: во-первых, это более реалистичная эмуляция фактической конфигурации вашего приложения, топологии сети, настроек безопасности и т. Д. Во-вторых, вы можете автоматизировать запуск тестов в качестве шага после развертывания или даже запускать тесты автоматически, как часть мониторинга приложений в производстве. Вот пример теста Verde, взятого из примера MvcMusicStore, который включен в исходный код на GitHub:

[IntegrationTest]
public void Index_Load_ExpectedHtml()
{
  // Get a product to load the details page for.
  var album = storeDB.Albums
    .Take(1)
    .First();

  using (var scope = new MvcExecutorScope("Store/Details/" + album.AlbumId))
  {
    Assert.AreEqual(200, scope.HttpContext.Response.StatusCode);
    Assert.IsTrue(scope.Controller is StoreController);
    Assert.AreEqual("Details", scope.Action);

    var model = scope.Controller.ViewData.Model as Album;
    Assert.IsNotNull(model);
    Assert.AreEqual(album.AlbumId, model.AlbumId);

    Assert.IsFalse(String.IsNullOrEmpty(scope.ResponseText));

    // Load the ResponseText into an HtmlDocument
    var html = new HtmlDocument();
    html.LoadHtml(scope.ResponseText);

    // Use ScrappySharp CSS selector to make assertions about the rendered HTML
    Assert.AreEqual(album.Title, html.DocumentNode.CssSelect("#main h2").First().InnerText);
  }
}

Существует пакет NuGet, который очень легко добавить в ваш проект MVC.

0 голосов
/ 08 июля 2010

Если вы хотите провести полное интеграционное тестирование, протестируйте приложение с точки зрения пользователя.Создайте контрольные примеры, например:

  1. Войдите в систему как администратор
  2. Перейти на страницу пользователей
  3. Добавить пользователя с именем «User1»
  4. Проверить этого пользователяс именем «User1», указанным в сетке «Пользователи».

И автоматизируйте такие тесты, используя Selenium или Watin.Смотрите пример здесь

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