Статьи

DBUnit, Spring и аннотации для тестирования базы данных

Если вы когда-нибудь пробовали писать тесты баз данных на Java, вы могли бы встретить DBUnit . DBUnit позволяет вам настраивать и разбирать вашу базу данных так, чтобы она содержала согласованные строки, по которым вы можете писать тесты.

Обычно вы указываете строки, которые вы хотите, чтобы DBUnit вставлял, написав простой XML-документ, например:

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
 <Person id="0" title="Mr" firstName="Dave" lastName="Smith"/>
 <Person id="1" title="Mrs" firstName="Jane" lastName="Doe"/>
</dataset>

Вы также можете использовать XML-файлы того же формата, чтобы утверждать, что база данных содержит определенные строки.

DBUnit особенно хорошо работает с базами данных в памяти, и если вы работаете с Spring, настроить их довольно просто. Вот хорошая статья, описывающая, как начать.

Работать напрямую с DBUnit — это хорошо, но через некоторое время может стать очевидным, сколько ваших тестов следуют той же схеме настройки базы данных, а затем проверяют результат. Чтобы сократить это дублирование, вы можете использовать проект spring-test-dbunit . Этот проект размещен на GitHub и предоставляет новый набор аннотаций, которые можно добавить в ваши методы тестирования. Версия 1.0.0 была только что выпущена и теперь доступна в центральном репозитории maven:

1
2
3
4
5
6
<dependency>
  <groupId>com.github.springtestdbunit</groupId>
  <artifactId>spring-test-dbunit</artifactId>
  <version>1.0.0</version>
  <scope>test</scope>
</dependency>

После установки в ваших тестах доступны три новые аннотации: @DatabaseSetup , @DatabaseTearDown и @ExpectedDatabase . Все три могут быть использованы в классе тестирования или отдельных методах тестирования.

Аннотации @DatabaseSetup и @DatabaseTearDown используются для приведения вашей базы данных в согласованное состояние, либо до запуска теста, либо после его завершения. Вы указываете набор данных для использования в качестве значения аннотации, например:

1
2
3
4
5
@Test
@DatabaseSetup("sampleData.xml")
public void testFind() throws Exception {
  // test code
}

Аннотация @ExpectedDatabase используется для проверки состояния базы данных после завершения теста. Как и в предыдущих аннотациях, вы должны указать набор данных для использования.

1
2
3
4
5
6
@Test
@DatabaseSetup("sampleData.xml")
@ExpectedDatabase("expectedData.xml")
public void testRemove() throws Exception {
  // test code
}

Вы можете использовать @ExpectedDatabase в нескольких различных режимах в зависимости от того, насколько строгой должна быть проверка (подробности см. В JavaDocs ).

Для обработки аннотаций необходимо убедиться, что в вашем тесте используется DbUnitTestExecutionListener. Смотрите readme проекта для более подробной информации. Если вы хотите узнать больше, здесь есть пример проекта на GitHub и несколько простых инструкций.

Справка: тестирование базы данных с использованием DBUnit, Spring и аннотаций от нашего партнера по JCG Филиппа Уэбба в блоге Фила Вебба .