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