Как правильно использовать TDD - PullRequest
0 голосов
/ 16 октября 2019

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

Мой самый большой вопроскак правильно использовать TDD. У меня может быть неправильное представление, но из того, что я понимаю, вы сначала пишете все свои тесты и заставляете их терпеть неудачу, потому что у вас еще нет кода, но как я могу написать все свои тесты, если я еще даже не знаю всеединицы измерения, которые у меня будут / нужны?

В этом случае, поскольку я использую CircleCI, если он не позволит мне объединить код, если он не пройдет тесты, как это может работать? Поскольку будут написаны тесты, но нет кода для этого теста специально. Я ошибаюсь, и вы пишете тесты по мере развития возможностей? Это тема, которую мне действительно трудно понять, но мне бы очень хотелось понять это правильно, так как я верю, что это действительно поможет в будущем.

1 Ответ

1 голос
/ 16 октября 2019

Мой самый большой вопрос - как правильно использовать TDD? У меня может быть неправильное представление, но из того, что я понимаю, вы сначала пишете все свои тесты и заставляете их терпеть неудачу, потому что у вас еще нет кода, но как я могу написать все свои тесты, если я еще даже не знаю всеединиц, которые у меня будут / нужны?

Не совсем правильная идея.

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

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

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

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

Обычно мы не нажимаем / не публикуем / не делимся кодом, когда он не работает,Вместо этого тест и рабочая реализация совместно используются. Мы не разделяем нарушенные промежуточные этапы или известные ошибки;вместо этого мы делимся успехами.

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

Это полностьюНормально чувствовать, что первый тест сложен - вы пишете тестовую реализацию для кода, который еще не существует. Мы склонны использовать воображение здесь;предположим, что нужный вам производственный код уже существует, как бы вы его вызвали? какие данные вы бы передали ему? Какие данные вы бы вернули? и вы пишете тест, как будто идеальный интерфейс для того, что вы хотите сделать, уже существует. Затем вы создаете производственный код, соответствующий этому интерфейсу;затем вы даете этому производственному коду правильное поведение;затем вы даете рабочему коду дизайн, который позволит легко изменить его позже.

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

И так до тех пор, пока не дойдете до конца контрольного списка.

...