Тест DAO: правильный путь? - PullRequest
4 голосов
/ 30 марта 2012

Я хочу протестировать свой класс MyTypeDAO, реализованный в Hibernate 4.1 с использованием JUnit 4.9.У меня следующий вопрос:

В моем DAO у меня есть метод findById, который извлекает экземпляр моего типа по его идентификатору.Как проверить этот метод?

Что я сделал:

  1. Я создаю экземпляр моего типа.
  2. Затем мне нужно сохранить этот экземпляр,но как?Могу ли я положиться на мой метод saveMyType?Я так не думаю, поскольку я в тестовом примере, и этот метод не тестируется.
  3. Затем мне нужно вызвать метод findById с идентификатором экземпляра, созданного на шаге 1.
  4. Наконец, я проверяю, что экземпляр, созданный на шаге 1, равен экземпляру, полученному на шаге 3.

Есть идеи?Каковы рекомендации?

У меня те же вопросы к методу сохранения, так как после его запуска мне нужно получить экземпляр сохранения.Здесь также я не думаю, что могу положиться на свой метод findById, поскольку он еще не проверен.

Спасибо

Ответы [ 2 ]

4 голосов
/ 30 марта 2012

Один из возможных способов:

Создайте базу данных в памяти для тестирования, загрузите содержимое этой базы данных из предопределенного сценария sql и затем протестируйте свои классы DAO для этой базы данных.

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

See [DbUnit][1] (из комментария сатоши)

1 голос
/ 30 марта 2012

Я не думаю, что у вас есть большой выбор, чтобы достичь этого. Не рекомендуется проводить ортогональные тесты (тесты, которые проверяют две вещи или являются зависимыми). Тем не менее, вы должны действительно считать это исключение действительным и быстрым. Вы правы: сохранение объекта и его извлечение - хорошая идея для тестирования этого дао-слоя.

Другие варианты включают в себя наличие записи, в которой вы уверены, в базе данных и тестирование поиска (findById) для нее. И второй тест для сохранения объекта и удаления его методом демонтажа.

Но на самом деле было бы проще протестировать загрузку и сохранение вместе, и это имеет большой смысл.

...