Только прочитав первые четыре главы Рефакторинг: улучшив дизайн существующего кода, я приступил к моему первому рефакторингу и почти сразу пришел к дорожный блок. Это связано с тем, что перед тем, как вы начнете рефакторинг, вы должны поместить модульные тесты вокруг устаревшего кода. Это позволяет вам быть уверенным, что ваш рефакторинг не изменил то, что сделал исходный код (только как он это сделал).
Итак, мой первый вопрос: как мне выполнить единичный тест метода в устаревшем коде? Как я могу поместить метод unit test вокруг 500 строк (если мне повезет), который не выполняет только одну задачу? Мне кажется, что мне пришлось бы реорганизовать мой код устаревшего кода, чтобы сделать его работоспособным.
Есть ли у кого-нибудь опыт рефакторинга с использованием модульных тестов? И если да, есть ли у вас какие-нибудь практические примеры, которые вы можете поделиться со мной?
Мой второй вопрос несколько сложно объяснить. Вот пример: я хочу реорганизовать унаследованный метод, который заполняет объект из записи базы данных. Разве я не должен был бы написать unit test, который сравнивает объект, полученный с помощью старого метода, с объектом, полученным с использованием моего метода refactored? В противном случае, как я узнаю, что мой рефакторированный метод дает те же результаты, что и старый метод? Если это так, то как долго я оставлю старый устаревший метод в исходном коде? Я просто ударил его после того, как проверил несколько разных записей? Или мне нужно некоторое время поддерживать его на случай, если я столкнусь с ошибкой в моем обновленном коде?
Наконец, поскольку пару человек спросили... старый код был первоначально написан на VB6, а затем перенесен на VB.NET с минимальными изменениями архитектуры.