Практический рефакторинг с помощью модульных тестов

Предложение вашей работы над текущей версией django: python manage.py syncdb устарело. Вместо этого используйте python manage.py migrate, чтобы применить основные миграции django.

Чем создавать и применять свои собственные миграции:

python manage.py makemigrations MYAPP 
python manage.py migrate

Чтобы получить список всех доступных и примененных миграций, используйте:

python manage.py showmigrations
11
задан 6 February 2009 в 22:14
поделиться

7 ответов

Хороший пример теории, встречающей действительность. Модульные тесты предназначены для тестирования единственной операции, и многие пуристы шаблона настаивают на Единственном Responsibilty, таким образом, у нас есть прекрасный чистый код и тесты для движения с ним. Однако в реальном (грязном) мире, код (особенно унаследованный код) делает много вещей и не имеет никаких тестов. То, в чем это нуждается, является дозой рефакторинга для очистки путаницы.

Мой подход должен создать тесты, с помощью инструментов Unit Test, тот тест много вещей в единственном тесте. В одном тесте я могу проверять, что соединение с БД открыто, изменяя много данных, и делая прежде чем/после того, как проверяют DB. Я неизбежно пишу классы помощника делать проверку, и как правило те помощники могут затем быть добавлены в кодовую базу, поскольку они инкапсулировали поведение/логику/требования на стадии становления. Я не подразумеваю, что у меня есть единственный огромный тест, что я действительно имею в виду, тесты mnay, делают работу, которую пурист назвал бы интеграционным тестом - такая вещь все еще существует? Также я нашел полезным создать тестовый шаблон и затем создать много тестов из этого, проверить граничные условия, комплекс, обрабатывающий и т.д.

BTW, который языковая среда мы говорим о? Некоторые языки предоставляют себя рефакторингу лучше, чем другие.

4
ответ дан 3 December 2019 в 07:39
поделиться

Для получения инструкций относительно того, как осуществить рефакторинг унаследованный код, Вы могли бы хотеть прочитать книгу, Работающую Эффективно с Унаследованным кодом. Существует также короткая версия PDF, доступная здесь.

9
ответ дан 3 December 2019 в 07:39
поделиться

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

1
ответ дан 3 December 2019 в 07:39
поделиться

Тесты записи в том, что когда-либо уровень системы Вы можете (если Вы можете), если это означает выполнять базу данных и т.д. затем пусть будет так. Необходимо будет написать намного больше кода для утверждения то, что код в настоящее время делает как 500 строк +, метод собирается возможно иметь большое поведение, обернутое в нем. Что касается сравнения старого по сравнению с новым, если Вы пишете тесты против старого кода, они передают, и они покрывают все, что это делает затем при выполнении их против нового кода, Вы эффективно проверяете старое по новому. Я сделал это для тестирования комплекса sql инициировало, я хотел осуществить рефакторинг, это было болью и заняло время, но месяц спустя, когда мы нашли другую проблему в той области, стоило иметь тесты там для доверия.

1
ответ дан 3 December 2019 в 07:39
поделиться

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

Я видел подобные проблемы с модульным тестом самим, который вырос для становления системой/функциональным испытанием. Самая важная вещь разработать тесты для или существующего кода Прежней версии состоит в том, чтобы определить термин "единица". Это может быть даже функциональный блок как "чтение из базы данных" и т.д. Определите ключевые функциональные блоки и поддержите тесты, который увеличивает стоимость.

Как в стороне, был недавний разговор между Joel S. и Martin F. на TDD/модульных тестах. Мое взятие - то, что важно определить единицу и сосредоточить внимание на нем! URL: Откройте Letter, расшифровку стенограммы Joel и подкаст

1
ответ дан 3 December 2019 в 07:39
поделиться

Это действительно - одна из ключевых проблем попытки переоборудовать унаследованный код. Могут Вы для разрушения проблемной области к чему-то более детализированному? Это 500 + метод строки делают что-нибудь кроме системных вызовов Платформы JDK/Win32/.NET JARs/DLLs/assemblies? Т.е. Есть ли больше детализированных вызовов функции в тех 500 + громадина строки, что Вы могли модульный тест?

0
ответ дан 3 December 2019 в 07:39
поделиться

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

Я нашел это весьма полезным.

0
ответ дан 3 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: