Как правило, для DAO идея заключается в том, чтобы иметь минимальную оболочку вокруг кода доступа к данным, поэтому тестировать там нечего, кроме сопоставления с базой данных, а модульные тесты с имитациями бесполезны. Если в DAO действительно есть логика, достойная тестирования с помощью mocks, то можно привести аргумент, что вы неправильно используете шаблон DAO и что логика должна быть в сервисе.
Для тестирования сопоставления с базой данных DBUnit полезно, потому что это позволяет вам указать начальный набор данных перед тестом, чтобы ваш тест начинался с известного состояния, и это позволяет вам указать, какое конечное состояние данных должно быть, так что вам не нужно писать много кода модульного теста, утверждающего, что там есть то, что ожидается.
В идеале, если у вас есть такой инструмент, как Hibernate, который абстрагирует базу данных, вы можете обойтись при использовании базы данных в памяти, такой как H2 или HSQLDB, чтобы ваши тесты работали быстрее и не было базы данных для создания. Если вам действительно нужно использовать реальную базу данных, убедитесь, что ваши тесты имеют ее для себя, чтобы они могли создавать и удалять данные, не затрагивая и не влияя на другие процессы. На практике маловероятно иметь базу данных для себя, как локально, так и в среде CI, а использование базы данных в памяти гораздо более практично.