Как справиться с фазой рефакторинга TDD - PullRequest
5 голосов
/ 14 апреля 2011

В ходе сеанса TDD предположим, что я пишу провальный тест, а затем заставляю его пройти.Я выполняю рефакторинг, извлекая код из исходного модуля, используя рефакторинги, такие как Extract Class и Move Method.Теперь предположим, что мой исходный тест больше не покрывает извлеченный код, поскольку исходный код теперь копирует его зависимости, как это верно для модульного теста.

Уместно ли возвращаться и модифицировать тесты для извлеченного кода?Или я ошибся в том, что я получил непроверенный код во время рефакторинга?Такое ощущение, что моя кодовая база масштабируется, и мне нужно провести рефакторинг, я переоборудую множество тестов на рефакторинг кода.Это чувствует себя действительно неловко.Я неправильно рефакторинг?

Ответы [ 2 ]

5 голосов
/ 14 апреля 2011

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

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

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

0 голосов
/ 14 апреля 2011

Это может указывать на то, что ваши юнит-тесты недостаточно детализированы.Например, вы написали интеграционный тест, выполнили его, а теперь проводите модульные тесты на месте.

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

...