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