Недавно мы добавили автоматизированные тесты в наши существующие Java-приложения.
Что у нас есть
Большинство этих тестов являются интеграционными тестами, которые могут охватывать стек вызовов, таких как: -
- HTTP-сообщение в сервлете
- Сервлет проверяет запрос и вызывает бизнес-уровень
- Бизнес-уровень делает кучу вещей через hibernate и т. Д. И обновляет некоторые таблицы базы данных
- Сервлет генерирует некоторый XML, запускает его через XSLT для получения HTML-ответа.
Затем мы проверяем, что сервлет ответил правильным XML и что в базе данных есть правильные строки (наш экземпляр Oracle разработки). Эти строки затем удаляются.
У нас также есть несколько небольших модульных тестов, которые проверяют вызовы одного метода.
Все эти тесты выполняются как часть наших ночных (или adhoc) сборок.
Вопрос
Это кажется хорошим, потому что мы проверяем границы нашей системы: запрос / ответ сервлета на одном конце и база данных на другом. Если это сработает, то мы можем свободно рефакторинг или связываться с чем-то промежуточным и иметь некоторую уверенность в том, что тестируемый сервлет продолжает работать.
С какими проблемами мы можем столкнуться при таком подходе?
Я не вижу, как может помочь добавление еще нескольких юнит-тестов для отдельных классов. Разве это не затруднит рефакторинг, так как с большей вероятностью нам придется выбросить и переписать тесты?