Инструменты и методы для тестирования слоев Service / DAO в Java - PullRequest
5 голосов
/ 01 марта 2011

Я пытаюсь выяснить, как лучше всего протестировать уровни Service и DAO. Итак, несколько подвопросов ...

  1. При тестировании сервисного уровня лучше всего тестировать на фиктивном уровне DAO или "живом" уровне DAO, нацеленном на среду тестирования?
  2. Как следует тестировать SQL на уровне DAO, когда единственная тестовая база данных находится в общей среде (Oracle / DB2)
  3. Как вы решаете парадокс любых операций записи / обновления DAO, которые необходимо проверить с помощью операций чтения DAO, что также необходимо проверить?

Я ищу любую хорошую документацию, статьи или ссылки в этой области вместе с любыми инструментами, которые помогут автоматизировать процесс. Я уже знаю о JUint для модульного тестирования и Hudson для CI.

Ответы [ 2 ]

4 голосов
/ 01 марта 2011

Get Растущее объектно-ориентированное программное обеспечение, руководствуясь тестами . Там есть несколько полезных советов о том, как проверить доступ к базе данных.

Лично я обычно разбиваю тесты DAO на 2, модульный тест с проверенной базой данных для проверки функциональности в DAO и интеграционный тест для тестирования запросов к БД. Если ваш DAO имеет только код доступа к базе данных, вам не потребуется юнит-тест.

Одно из предложений, которое я взял из книги, заключается в том, что (интеграционный) тест должен фиксировать изменения в БД. Я научился делать это после использования hibernate и выяснения, что тест был помечен для отката, и БД так и не получила оператор вставки. Если вы используете триггеры или любой вид проверки (даже FK), я думаю, что это необходимо.

Другое дело, держитесь подальше от dbunit, это отличный фреймворк, чтобы начать работать, но он становится адским, когда проект становится чем-то большим, чем крошечный. Здесь я предпочитаю иметь набор классов Test Data Builder для создания данных и вставки их в настройку теста или в сам тест.

И проверьте dbmigrate, это не для тестирования, но это поможет вам управлять сценариями для обновления и понижения вашей схемы БД.

В сценарии, где используется сервер БД, я создаю одну схему / пользователя на среду. Поскольку у каждого разработчика есть своя «локальная» среда, он также владеет одной схемой.

3 голосов
/ 01 марта 2011

Вот мои ответы:

  1. Используйте фиктивные DAO для тестирования ваших услуг.Намного проще, намного быстрее.Используйте EasyMock, Mockito или любую другую фиктивную среду для тестирования уровня обслуживания.
  2. Предоставьте каждому разработчику собственную схему базы данных для выполнения своих тестов.Такие схемы обычно пусты: модульные тесты заполняют базу данных небольшим набором тестовых данных перед запуском теста и очищают его после завершения теста.Для этого используйте DBUnit * 1007. *проверить пишет.Но вы также можете использовать специальные запросы или даже DBUnit для проверки работоспособности записи.Тот факт, что тесты не обязательно выполняются в этом порядке, не имеет значения.Если все проходит, то все в порядке.
...