Функциональное тестирование .net MVC - PullRequest
6 голосов
/ 12 июля 2011

Как мне выполнить функциональное тестирование контроллера / действия .net mvc.

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

Для меня не сразу очевиден аналог функционального и интеграционного тестирования Rails в мире .NET.Rails делает функциональное тестирование настолько очевидным и простым, что было бы глупо не тратить время на то, чтобы получить покрытие.С .NET - мне еще предстоит заставить Google дать хоть один результат, который кажется стоящим.Я надеюсь, что это мой зарождающийся статус .net, который просто мешает мне ввести правильные условия поиска или пропустить какую-то парадигму.

HELP!

Ответы [ 3 ]

3 голосов
/ 11 июля 2012

Простите за отсутствие знаний о Rails, а также за то, что я рассказал вам, что вы уже знаете о rails, но я надеюсь представить вещи в формате сравнения для других пользователей.

В Rails есть 3 типа тестов.Модульные, функциональные и интеграционные.

Модульные тесты тестируют ваши модели

Функциональные тесты для ваших контроллеров

Интеграционные тесты для тестирования потока между действиями контроллера

Эта парадигма, по-видимому, преподается с самого начала с помощью rails.

Однако в мире .NET MVC методы тестирования не изложены так, как в Rails.

Многие разработчики напишутМодульные тесты на их контроллерах так же, как вы пишете модульные тесты на своих моделях в рельсах.Вы в основном вызываете метод (Controller Action) и получаете объект обратно из метода.Затем вы можете утверждать, что он имеет ожидаемые значения.Делать это - боль в заднице, потому что вы должны издеваться над таким дерьмом (HttpContext и т. Д.).Плюс, это не функциональный тест.Вы тестируете только один метод, в отличие от тестирования функциональности приложения.

В Rails вы не пишите модульный тест на своем контроллере, вы фактически делаете веб-запрос и получаете веб-ответ,Вы можете проверить код состояния, файлы cookie и т. Д. Вы тестируете систему из конца в конец.

Есть несколько способов сделать это в .NET MVC

1) Стивен Сандерсонесть небольшой инструмент, чтобы помочь с этим.

http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/

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

2) RestSharp + NUnit - этомое нынешнее предпочтение делать подобные тесты.Это позволяет вам составить веб-запрос и получить ответ довольно легко.С помощью нескольких общих методов вы можете двигаться довольно быстро с помощью restsharp.NUnit предоставит вам необходимые вам утверждения.Я просто делаю запрос к моему локальному серверу IIS и утверждаю различные элементы, которые я ожидаю в ответе.На самом деле вы не сможете проверить, какая модель назначена представлению, как вы можете в рельсах, но для меня это не проблема.

Если вы привыкли к RSpec, то вы можете получить SpecFlow, которыйдолжно быть похоже.

Rails строит тестирование прямо в фреймворке и является первоклассным гражданином.Жаль, что это не так в .NET MVC.

Надеюсь, это поможет.

0 голосов
/ 19 февраля 2016

Лучший способ модульного тестирования приложения MVC - добавить новый Модульный тестовый проект внутри решения.Просто щелкните правой кнопкой мыши решение проекта, нажмите «Добавить», затем «Добавить» -> «Тестовый проект».

Вы увидите тестовый класс, в котором будут методы с атрибутом [TestMethod] поверх них.Вы будете писать свою логику модульного тестирования в этих методах.

Внутри тестового проекта добавьте новую ссылку .dll проекта MVC, для которого должно быть выполнено модульное тестирование.Это позволит тестовому проекту обнаружить фактические действия контроллера основного проекта.

Добавить ссылку на пространство имен System.Web.MVC.

Пожалуйста, обратитесь к образцу метода тестирования ниже:

[TestMethod]
public void DisplayCustomer()
{
   CustomerController obj = new CustomerController();
   var testResult = obj.DisplayCustomer();
   Assert.AreEqual("DisplayCustomer",testResult.ViewName);
}

Создайте и запустите проект, чтобы увидетьпройти / не сдать тесты в окне Результаты теста

Надеюсь, это поможет!

Спасибо.

0 голосов
/ 12 июля 2011

Если вы действительно хотите протестировать функциональность, в отличие от стандартного «модульного» тестирования, у вас есть несколько вариантов.

  1. Проявите творческий подход и используйте тест MS, чтобы настроить больше функциональных тестов.
  2. использовать каркас типа BDD (specFlow?)
  3. используйте более функциональную среду тестирования, такую ​​как Selenium

Если вы нацелены на функциональное тестирование в направлении более автоматизированного UAT, у вас также есть такие элементы, как FIT Framework (и Fitnesse).

Являются ли они прямым аналогом инструментария и фреймворков в Rails? Нет, но .NET - это не Rails.

...