Написание тестов для DAO - PullRequest
12 голосов
/ 25 мая 2010

В настоящее время мне поручено написать тест для проекта, нужно ли писать тесты для классов DAO?

Ответы [ 7 ]

7 голосов
/ 25 мая 2010

Зависит от: -)

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

[Обновление] Например. с EasyMock вы можете легко настроить макет для определенного класса (с его расширением класса, даже конкретные классы могут быть смоделированы), сконфигурировать его так, чтобы он возвращал определенный объект из определенного вызова метода, и вставлять его в ваш класс для тестирования.

Сайт EasyMock, похоже, сейчас недоступен, надеюсь, он скоро вернется - тогда вы можете проверить документацию, которая, на мой взгляд, довольно чистая и тщательная, с множеством примеров кода. Без подробностей в вашем вопросе я не могу дать более конкретный ответ. [/ Update]

Если, OTOH, DAO содержат также бизнес-логику, ваш лучший выбор - если вы можете сделать это - это реорганизовать их и вывести бизнес-логику из DAO, тогда вы можете применить предыдущую стратегию.

Но суть в том, что всегда помните девиз модульного тестирования «проверить все, что может сломаться». Другими словами, нам нужно расставить приоритеты в наших задачах и сосредоточить наши усилия на написании тестов, которые приносят наибольшую пользу при наименьших усилиях. Сначала напишите модульные тесты для самых критических, наиболее подверженных ошибкам частей кода. Код, который, на ваш взгляд, настолько прост, что его невозможно сломать, находится ниже по списку. Конечно, желательно проконсультироваться с опытными разработчиками по конкретным частям кода - они могут знать и замечать возможные ловушки и проблемы, о которых вы не знаете.

* модульные тесты должны быть легкими, быстрыми и максимально изолированными от окружающей среды. Поэтому тесты, включающие вызовы реальной БД, - это не модульные тесты, а интеграционные тесты. Хотя технически они могут быть построены и выполнены с помощью JUnit (и, например, DbUnit), они намного сложнее и на несколько порядков медленнее, чем подлинные модульные тесты. Иногда это делает их непригодными для выполнения после каждого небольшого изменения кода, поскольку могут (и часто должны) использоваться регулярные модульные тесты.

4 голосов
/ 25 мая 2010

Да. Но мало кто будет утверждать, что это не относится к категории юнит-тестов. Потому что это не будет соответствовать определению модульного теста. Мы называем это интеграционным тестом, где тестируем интеграцию кода в базу данных.

Более того, я согласен с идеей Бруно здесь. Кроме того, есть API, доступные только для этого, один из них DBUnit.

4 голосов
/ 25 мая 2010

Да, вы должны написать модульные тесты для DAO.

Эти модульные тесты могут использовать базу данных в памяти. См. Например: HyperSQL

Статья о том, как использовать HyperSQL для написания модульных тестов персистентности в Java:

http://www.mikebosch.com/?p=8

0 голосов
/ 24 ноября 2013

Книга xUnit Test Patterns предлагает много полезных идей по этому вопросу.

0 голосов
/ 15 декабря 2011

Я бы сказал, что мы должны написать модульные тесты для DAO, и одна из самых сложных задач для этого - настройка и очистка тестовых данных. Вот где я думаю, что фреймворки, такие как среда тестирования Spring JDBC, могут помочь нам, позволив нам контролировать транзакцию, используя различные аннотации [Пример: @Rollback (true)].

Например, если вы тестируете операцию «создать / вставить», Spring позволяет вам полностью откатить транзакцию после выполнения тестового метода, тем самым всегда оставляя базу данных в ее исходном состоянии.

Вы можете просмотреть эту ссылку для получения дополнительной информации: Весеннее тестирование

Это может быть еще более полезно, когда для ваших интеграционных тестов вы не хотите, чтобы один тест нарушал целостность данных, что может привести к сбою другого теста.

0 голосов
/ 25 мая 2010

Да. Есть несколько преимуществ от этого. Если вы уверены, что ваш слой DAO работает нормально, исправление дефектов на более поздних этапах становится простым.

0 голосов
/ 25 мая 2010

Нет необходимости писать тесты для чего-либо. Получаете ли вы выгоду от написания тестов для ваших классов DAO? Возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...