Как реализовать unit-тестирование DAO объекта в Java (JUnit)?
Добрый день.
Как вы обычно реализовываете unit-тестирование DAO? Проводите ли вы тестирование каждого метода независимо, либо проводите тест всех методов в одном тестовом методе? Дело в том, что я пробовал реализовать тест, используя библиотеку TestNG, так как там имеется возможность определить зависимость тестов друг от друга, но на работе меня за это поругали и сказали, чтобы я только пользоваться JUnit, так это уже не unit тестирование получается.
Но я никак не могу понять, как провести такое независимое тестирование для DAO объекта, если налицо связь некоторых методов.
Приведу пример. Например, два метода:
1) private Entity getEntityById(long id)
2) private void deleteById(long id)
Ведь логично же здесь, что для того, чтобы нормально протестировать delete, мне нужно воспользоваться методом getById, чтобы проверить, что сущность была успешно удалена.
Разве всегда зависимость тестовых методов это плохо?
Юнит-тестирование обычно все же делается "один тест на один метод". Граница тут довольно размыта, но ИМХО смысл в этом есть. Не могу точно сказать, как это делается именно на Java, но на ruby я в таком случае запрашиваю сущность не через метод бизнес-слоя, а напрямую из active record. В вашем случае это был бы EntityManager (или аналог из Spring Data).
По мне так независимые тесты определенно лучше зависимых, к примеру, при падении проще понять. что именно отвалилось.
А вообще существует подход, когда взаимодействие с БД стабится/мокируется полностью, что позволяет писать сверхзвуковые тесты. Хотя я лично считаю, что in-memory db вполне достаточно.