Ответ 1
Это зависит: -)
Если ваши классы DAO содержат только код, необходимый для извлечения сущностей из БД, лучше протестировать их в отдельных тестах интеграции *. Код для модульной проверки - это "бизнес-логика", которую вы можете использовать unit test, используя макеты DAO.
[Обновить]. с EasyMock вы можете легко настроить макет для определенного класса (с его расширением класса, даже конкретными классами можно издеваться), configure он возвращает конкретный объект из определенного вызова метода и вводит его в тестируемый класс.
Веб-сайт EasyMock, похоже, сейчас не работает, надеюсь, он скоро вернется - тогда вы сможете проверить документацию, которая ИМХО достаточно чистая и тщательная, с большим количеством примеров кода. Без подробностей в вашем вопросе я не могу дать более конкретного ответа. [/Update]
Если OTOH, DAO содержат также бизнес-логику, ваш лучший выбор - если вы можете это сделать - будет реорганизовывать их и вывести бизнес-логику из DAO, тогда вы можете применить предыдущую стратегию.
Но суть в том, что всегда помните дегустатор тестирования устройства "проверяйте все, что может сломаться". Другими словами, нам необходимо уделить приоритетное внимание нашим задачам и сосредоточить наши усилия на написании тестов, которые принесут наибольшую пользу с наименьшими усилиями. Сначала пишите модульные тесты для наиболее критических, наиболее опасных для ошибок частей кода. Код, который, по вашему мнению, настолько прост, что он не может сломаться, находится дальше по списку. Конечно, рекомендуется проконсультироваться с опытными разработчиками по конкретным фрагментам кода - они могут знать и заметить возможные ловушки и проблемы, о которых вы не знаете.
* Модульные тесты должны быть максимально легкими, быстрыми и изолированными от окружающей среды. Поэтому тесты, которые включают вызовы в реальную БД, не являются модульными, а интеграционными тестами. Несмотря на то, что технически они могут быть построены и выполнены с помощью JUnit (и, например, DbUnit), они намного сложнее и на порядок медленнее, чем настоящие модульные тесты. Иногда это делает их непригодными для выполнения после каждого небольшого изменения кода, поскольку регулярные модульные тесты могут (и часто должны) использоваться.