Обзор: разработка через тестирование (TDD) = разработка сначала тестирование (TFD) + рефакторинг
Давайте сначала начнем с основных понятий.
TFD. В контексте экстремального программирования (XP) наша цель должна быть спецификация не подтверждена. Проще говоря, нам нужно продумать дизайн или требования, прежде чем приступить к написанию кода. Принимая это во внимание, TDD - это метод программирования.
Проще говоря, шаги в TDD заключаются в следующем:
- Добавьте быстрый тест - в основном достаточно кода для сбоя.
- Запустите тест - он должен потерпеть неудачу.
- Напишите функциональный код, чтобы пройти тест.
- Наконец, запустите тест, чтобы проверить, прошел ли он.
- Перефакторить до тех пор, пока тесты не пройдут, чтобы продолжить разработку.
Итак, как видите, TDD включает TFD и рефакторинг.
Идея TDD заключается в том, чтобы вместо написания функционального кода сначала, а затем кода тестирования, если вообще, вы сначала пишете тестовый код перед функциональным код. Для программиста, использующего подход TDD, отказывается писать какой-либо функциональный код, если нет соответствующего теста, который определяет эту конкретную функциональность, присутствует и который ОТКАЗЫВАЕТСЯ, потому что конкретная функция, определяющая эту функцию / функциональность, еще не присутствует. После того, как тест будет готов, только тогда мы будем писать наш функциональный код, чтобы гарантировать, что тест пройден. Это похоже на ПАРНОЕ ПРОГРАММИРОВАНИЕ, метод гибкой разработки программного обеспечения, в котором пара помогает вам не сбиться с пути.
Кажется, что это добавляет работы, но в конечном итоге помогает вам более эффективно разрабатывать и предотвращать ошибки в будущем. Если вы посмотрите на картину в целом, это уменьшит вашу рабочую нагрузку, а не прибавит к ней!
Чтобы прояснить ситуацию, давайте сделаем это на практике.
Я буду использовать Jest, среду тестирования JavaScript, и vs code в качестве редактора.
Шаг 1. Настройка среды.
Для использования установщика пакетов npm необходимо установить Node.js. В вашем терминале vscode введите следующие команды:
›npm init -y (при этом будут сохранены значения по умолчанию, и будет создан файл package.json)
›npm i -D jest (это я установит JEST как приложение D)
После завершения установки нам нужно перейти к файлу package.json и в разделе сценариев изменить значение «test» на «jest» .
Теперь мы создаем 2 файла -
1. app.js
2. app.test.js
Шаг 2. Начнем с app.test.js
В этом примере я буду работать с массивом имен.
Наша цель, которая может содержать один или несколько связанных тестов, основанных на представлении о том, что должна делать наша функция, будет содержаться в описании ( ) метод:
- Удалите имена, начинающиеся с "S".
- Не следует удалять другие имена
- Следует иметь в виду случай.
На основе вышеупомянутых критериев мы начинаем писать наши тестовые примеры, используя сопоставители. Всегда держите документацию под рукой и обращайтесь к ней при необходимости !!
Итак, наконец, мы проверим, фактический результат = ожидаемый результат на основе тестов ??
Шаг 3. Запустите тест. ›тест npm
Вы должны увидеть, что все 3 теста завершились неудачно, как показано на рис. 3.
Шаг 4: Теперь напишите функциональный код, чтобы тесты прошли!
Шаг 5. Теперь снова запустите тесты, используя- ›npm test.
Мы видим 1 тест пройден, 2 не пройден, как показано на рис. 5.
Шаг 6. Мы пишем код для прохождения тестов следующим образом:
Теперь мы видим, что все испытания прошли. На этом завершается подход TFD.
До этого момента мы следили за разработкой Test First (TFD), но, как мы видим, есть возможности для более компактного и чистого кода, и именно здесь появляется TDD.
Дело в том, что если мы модифицируем код, потому что у нас может быть лучшее решение для новой идеи, мы знаем, что если мы что-то сломаем, тесты не пройдут. Именно в этом нам и помогает TDD. Нам нужно провести рефакторинг нашего функционального кода, чтобы наши тесты прошли успешно, а также чтобы получить более чистый код, отвечающий поставленным задачам.
Если вы помните, в начале этого блога я упоминал:
TDD = TFD + refactoring .
Следовательно, мы собираемся провести рефакторинг нашего функционального кода, чтобы завершить последний * шаг в TDD.
*** Примечание. Окончательный , если рефакторинг не требуется. Продолжайте рефакторинг и тестирование, пока тесты проходят, и у нас будет наилучшее возможное решение с чистым кодом, отвечающим нашим целям.
Шаг 7. Реорганизация нашего функционального кода:
Выполнение тестов после рефакторинга не дает ожидаемого результата, поскольку все тесты завершились неудачно.
Итак, теперь нам нужно проверить код для его рефакторинга таким образом, чтобы наши тесты снова прошли!
Теперь, если мы запустим наши тесты, они пройдут. Следовательно, мы уже видим мощь TDD. Нам не нужно вручную тестировать нашу функцию, потому что мы уже написали тесты, которые делают именно это, прежде всего. Чем надежнее мы сделаем каждый из тестовых примеров, тем эффективнее будет наш код. Мы уменьшили размер нашей функции и знаем, что она работает, потому что все наши тесты прошли.
Итак, это разработка через тестирование и процесс рефакторинга с нашими тестами, который дает более надежный код. Удачного развития!
Использованная литература: