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

Как реализовать TDD в ASP.NET WebForms

Я знаю, что причина, по которой Microsoft появилась в ASP.NET MVC, заключалась в том, чтобы упростить работу с Test Driven Design (TDD) для ASP.NET. Тем не менее, у меня есть довольно большое коричневое поле (существующее) приложение в ASP.NET WebForms, что я хотел бы реализовать некоторые функции типа TDD. Я предполагаю, что есть способ сделать это, но каковы некоторые жизнеспособные варианты?

4b9b3361

Ответ 1

Microsoft представила ASP.NET MVC, потому что они думали, что могут зарабатывать деньги на неиспользованном рынке - те, кто считает, что веб-формы слишком "тяжеловесны", и которые программируют с использованием более легкой структуры. Сюда входят те, кто привык к парадигме MVC.

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

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

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

Считайте: ваши страницы должны иметь определенный внешний вид. Вы собираетесь написать неудачный unit test, чтобы доказать, что вы используете CSS правильно? Чтобы доказать, что вы используете правильные стили CSS? Я так не думаю.


Чтобы уточнить: В TDD мы начинаем с отказа unit test. Затем мы сделаем простейшие возможные изменения, которые сделают тест успешным.

Представьте, что вы используете TDD для веб-страницы. Какие неудачные тесты вы будете производить?

  • Проверить, что страница хорошо сформирована HTML
  • Проверьте, что страница содержит правильное название
  • Проверить эту страницу.
    • "Введите идентификатор"
    • Текстовое поле id
    • Сетка данных
    • Кнопка "Перейти"
  • Проверьте, что сетка данных пуста после GET
  • Проверьте, что сетка загружается данными от клиента 1, когда в текстовое поле введено "1", и нажата кнопка "Перейти" .

И ни один из вышеперечисленных тестов для появления страницы. Ни одно из них не проверяет поведение на стороне клиента какого-либо JavaScript на странице.

Я думаю, что это глупо. Вместо этого проверьте свой метод DAL, который извлекает данные на основе идентификатора. Убедитесь, что он возвращает правильный идентификатор для идентификатора 1. Затем, сколько времени потребуется, чтобы вручную протестировать страницу, чтобы убедиться, что она выглядит правильно, вы можете ввести "1" и нажать "Перейти" , а данные, которые появляются в сетка - это правильные данные для клиента 1?

Тестируемые разработки и автоматизированные модульные тесты предназначены для тестирования поведения. Пользовательский интерфейс веб-формы в основном декларативный. Здесь имеется большое "несоответствие импеданса".

Ответ 2

Прежде всего, его действительно сложно проверить WebForms. Но если вы выходите из логики контроллеров/презентаторов, таких как шаблон MVC/MVP, вы можете по крайней мере протестировать докладчиков.

Псевдо-код

Default.aspx

public void Page_Init(object sender, EventArgs e) {
 _presenter = new DefaultPresenter(IDependencyOne, IDependencyTwo etc) //Init new presenter, either from IoC container of choose or "new-it-up"
}

public void Save() {
 _presenter.Save(txtValue.Text)
}

Чем вы можете легко протестировать презентатора по крайней мере в изоляции =)

Ответ 3

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