Рекомендации по рефакторингу тестового кода


В настоящее время у меня есть работа в QA, и в моей компании все в QA пишут автоматические тесты. Недавно я читалрефакторинг: улучшение дизайна существующего кода Мартина Фаулера. Я пришел к пониманию, что многие наши тестовые классы и тестовые утилиты очень грязны, избыточны и остро нуждаются в рефакторинге.

Тем более, что я читал на эту тему, Я горю желанием погрузиться и очистить вещи, но есть одна проблема. В своей книге " Фаулер подчеркивает, что модульное тестирование кода в рефакторе необходимо для предотвращения появления ошибок. Поскольку код, который я пытаюсь рефакторировать, является тестовым кодом, кажется довольно глупым его модульное тестирование. У кого-нибудь из вас есть предложения по рефакторингу или даже разработке тестового кода? Кроме того, если это поможет, тестовая платформа, которую мы используем, построена поверх JUnit, и поэтому тестовые классы, о которых я говорю, являются потомками TestCase.

Спасибо!

2 2

2 ответа:

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

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

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

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

Возможно, вы можете использовать какой-то машиночитаемый формат, например XML, чтобы упростить синтаксический анализ.

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

Можно также использовать код модульного теста, реализующий модульные тесты с еще более простой платформой модульных тестов. Если ваш код наследуется от JUnit, то используйте JUnit для его тестирования. Как минимум, вы должны предположить, что JUnit работает.