2011-07-13 3 views
2

У меня есть небольшой опыт работы с JUnit и TestNG, и сегодня мне нужно сделать некоторые тесты для кода ядра Java.Тестирование блока базы данных с использованием JUnit

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

Есть ли какие-либо подсказки, которые вы можете мне дать?

Спасибо.

EDIT 

Что вы думаете о DbUnit

+0

Вы должны предоставить более подробную информацию. Что вы хотите протестировать в базе данных. Ваши подключения к базе данных (или другие параметры, относящиеся к db), или ваш уровень доступа к данным. Если вы хотите протестировать свой уровень доступа к данным, какой тип.(entity, ORM, например Hibernate и т. д.) –

+0

Я использую JDBC для управления базой данных, нет спящего режима без расположений (без фреймворков) –

ответ

4

Вы можете начать с DbUnit.

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

Ваш следующий более конкретно о DbUnit:

Что вы думаете о DbUnit

DbUnit была вокруг довольно долго. Что касается простых реализаций DAO (Data Access Object) (при условии, что вы следуете шаблону DAO), DbUnit подходит, так как вы можете настроить состояние базы данных перед тестированием DAO, а затем выполнить тест против DAO и убедитесь, что ожидаемая операция завершена успешно. Как и другие тесты JUnit, вы также можете ожидать исключений, выданных DAO, если в контракте DAO указывается, что будут исключены исключения, например, в тех случаях, когда данные не найдены.

Имейте в виду, что нет ничего впечатляющего в тестировании базы данных. Вы должны сосредоточиться на тестировании своих классов вместо тестирования базы данных. В более простых словах база данных (и драйвер JDBC) должна рассматриваться как соавторы для вашего SUT (System-Under-Test), а не как SUT. Это ваши классы DAO и их контракты, которые должны быть проверены.

4

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

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

Например, пружина поддерживает это из коробки через TestContext transaction management. Вы можете использовать Spring в своих тестах только для этого. С JDBC вы можете легко управлять транзакциями в тестах без него.

0

Acolyte позволяют легко зарегистрировать JDBC URL, поэтому тесты управления соединениями в процессе проверки, без изменения программного обеспечения проверены: https://github.com/cchantep/acolyte

Смежные вопросы