#unit-testing #junit #tdd
#модульное тестирование #junit #tdd
Вопрос:
поскольку методы уровня dao будут зависеть от данных в базе данных, в сложных системах некоторые операции будут зависеть от множества таблиц, таким образом, модульный тест не будет повторяемым и независимым,
мне интересно, насколько хорошие TDD-слои справляются с этим? спасибо.
Ответ №1:
ИМХО, вы к чему-то клоните… Если вы взаимодействуете со своим Sql Server, то вы выполняете не модульный тест, а интеграционные тесты. Если вы используете TDD, то вы понимаете это и начинаете переводить серверную коммуникацию в оболочку, чтобы вы могли заглушать и имитировать любые тестовые данные, вместо того чтобы использовать фреймворк вроде DBUnit для управления состоянием базы данных. Я думаю, что ваша бизнес-логика не должна напрямую связываться с базами данных — или веб-сервисами, или другими внешними ресурсами. Если это так, скорее всего, вы никогда не напишете ничего, кроме интеграционных тестов.
Комментарии:
1. Это правда, что подобные тесты больше похожи на интеграционные тесты, но независимо от того, какой ярлык вы на него навесите, все равно может возникнуть необходимость в тестировании. Как я упоминал в своем ответе, внедрение СУБД, такой как HSQLDB, исключит взаимодействие с сервером из уравнения, но есть ли лучшие способы убедиться, что такие вещи, как ORM, работают должным образом? Есть ли альтернатива чему-то вроде DBUnit, которая по-прежнему даст вам точную обратную связь о том, не нарушила ли настройка этого отображения гибернации что-то?
Ответ №2:
Платформа тестирования, подобная DBUnit, — это именно то, что вам нужно. С их сайта:
DBUnit — это расширение JUnit (также можно использовать с Ant), предназначенное для проектов, управляемых базами данных, которое, помимо прочего, переводит вашу базу данных в известное состояние между тестовыми запусками. Это отличный способ избежать множества проблем, которые могут возникнуть, когда один тестовый пример повреждает базу данных и приводит к сбою последующих тестов или усугубляет ущерб.
DBUnit также поддерживает различные СУБД, но я мог бы порекомендовать что-то вроде HSQLDB, которое можно встроить в ваш проект / тесты, чтобы ваши модульные тесты не зависели от возможности подключения к базе данных где-нибудь в подвале вашей компании. 🙂 Хотя, с другой стороны, вы будете тестировать с использованием другой СУБД, чем вы использовали бы в производственной среде…