У нас есть приложение, созданное с помощью пружины/гыть в спящем режиме/MySQL, теперь мы хотим протестировать уровень DAO, но здесь являемся несколькими недостатками, с которыми мы сталкиваемся.
Считайте вариант использования нескольких объектов подключенным друг к другу, например: Книга имеет Страницы.
Этим простым вариантом использования легко управлять, но если Вы начинаете создавать Библиотеку, пока Вы не создаете целую вселенную, окружающую Книгу и Page, Вы не можете протестировать его!
Таким образом протестировать Page;
Есть ли простой способ к передачей это "создание вселенной", и просто протестируйте объект страницы в изоляции. Я также хочу смочь протестировать HQLs, связанный с Page. например:
SELECT new com.test.BookPage (book.id, page.name) FROM Book book, Page page.
JUnit, как предполагается, работает в изоляции, таким образом, я должен написать код для создания всех объектов поддержки в тестовом сценарии для создания Страницы. Любые подсказки относительно того, как ускорить процесс.
Править: Spring следует за философией отката транзакции после того, как тесты были запущены, thereyby возвращающийся все изменения. Изменения схемы ожидаются, поскольку мы разрабатываем далее, я хочу смочь протестировать его против производственного дб (резервное копирование!) регулярно.
Расширения Unitils для junit или testng имеют очень хорошую поддержку для этого. Они позволяют вам определить наборы данных, настроенные для вашего тестируемого класса, так что ему нужна только та часть вселенной, которую видит ваш класс, а затем он инициализирует базу данных перед началом тестов.
проверка : текст ссылки
Мы используем его, и он просто отлично работает. Намного лучше, чем "MockRepositories", которые мы использовали раньше и которые не тестируют HQL и, что также важно, поведение транзакций hibernate.
Я только что закончил проект именно с такой конфигурацией. Мы добились большого успеха, используя резервную базу данных HSQLDB для модульных тестов, а затем отключив ссылочную целостность в схеме для этих тестов.
Так как вы используете Spring, вот следующие шаги:
create-drop
для схемы в этой конфигурации. AbstractTransactionalJUnit4SpringContextTests
, величайшего абстрактного класса в истории вселенной, и аннотируйте класс вашим новым @ContextConfiguration
. Также используйте аннотацию @TransactionConfiguration
для запуска каждого теста в транзакции с автоматическим откатом. Вот несколько ссылок, которые помогут вам продвинуться в этом направлении:
Как обычно в таких случаях, самое сложное - правильно настроить конфигурацию. Но когда все заработает, вы станете стильным юнит-тестером!