Тестирование В спящем режиме ДАО, не создавая вселенную вокруг этого

У нас есть приложение, созданное с помощью пружины/гыть в спящем режиме/MySQL, теперь мы хотим протестировать уровень DAO, но здесь являемся несколькими недостатками, с которыми мы сталкиваемся.

Считайте вариант использования нескольких объектов подключенным друг к другу, например: Книга имеет Страницы.

  • Объект страницы не может существовать без Книги, поскольку book_id является обязательный FK на Странице.
  • Для тестирования Страницы я должен создать Книгу.

Этим простым вариантом использования легко управлять, но если Вы начинаете создавать Библиотеку, пока Вы не создаете целую вселенную, окружающую Книгу и Page, Вы не можете протестировать его!

Таким образом протестировать Page;

  • Создайте библиотеку
  • Создайте раздел
  • Создайте жанр
  • Создайте автора
  • Создайте книгу
  • Создайте страницу
  • Теперь тест Page.

Есть ли простой способ к передачей это "создание вселенной", и просто протестируйте объект страницы в изоляции. Я также хочу смочь протестировать HQLs, связанный с Page. например:

SELECT new com.test.BookPage (book.id, page.name) FROM Book book, Page page.

JUnit, как предполагается, работает в изоляции, таким образом, я должен написать код для создания всех объектов поддержки в тестовом сценарии для создания Страницы. Любые подсказки относительно того, как ускорить процесс.

Править: Spring следует за философией отката транзакции после того, как тесты были запущены, thereyby возвращающийся все изменения. Изменения схемы ожидаются, поскольку мы разрабатываем далее, я хочу смочь протестировать его против производственного дб (резервное копирование!) регулярно.

6
задан 2 revs 27 May 2010 в 18:35
поделиться

2 ответа

Расширения Unitils для junit или testng имеют очень хорошую поддержку для этого. Они позволяют вам определить наборы данных, настроенные для вашего тестируемого класса, так что ему нужна только та часть вселенной, которую видит ваш класс, а затем он инициализирует базу данных перед началом тестов.

проверка : текст ссылки

Мы используем его, и он просто отлично работает. Намного лучше, чем "MockRepositories", которые мы использовали раньше и которые не тестируют HQL и, что также важно, поведение транзакций hibernate.

3
ответ дан 16 December 2019 в 21:35
поделиться

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

Так как вы используете Spring, вот следующие шаги:

  1. Создайте новый контекстный файл конфигурации для тестирования. Настройте hibernate на выполнение create-drop для схемы в этой конфигурации.
  2. Создайте свой junit-тест. Наследуйте от AbstractTransactionalJUnit4SpringContextTests, величайшего абстрактного класса в истории вселенной, и аннотируйте класс вашим новым @ContextConfiguration. Также используйте аннотацию @TransactionConfiguration для запуска каждого теста в транзакции с автоматическим откатом.
  3. выполните команду "SET REFERENTIAL_INTEGRITY FALSE;" через наследуемое свойство simpleJdbcTemplate в вашем методе @Before.
  4. посвятите остальную часть @Before вызовам simpleJdbcTemplate, которые устанавливают базу данных. Обратите внимание, что вам больше не нужно указывать каждый ссылающийся столбец, только тот, который вы тестируете!
  5. Наконец, напишите модульные тесты для ваших DAO.

Вот несколько ссылок, которые помогут вам продвинуться в этом направлении:

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

5
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: