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