Предзаполнение БД Postgres в тестконтейнере с помощью DbUnit в интегротестах

Рейтинг: 0Ответов: 0Опубликовано: 07.08.2023

Всем привет.

Стек: Java 17, Spring Boot 3.1.2, DbUnit 2.7.3

Пытаюсь написать интегротест, который поднимет тестконтейнер с postgres, запустит миграцию liquibase и создаст нужные таблицы, а затем с помощью аннотации @DatabaseSetup наполнит таблицу дефолтными данными описанными в xml-датасете.

Мой датасет:

<dataset>
    <shop id="TESTID" shop_type="Type1" has_source="false" version="2" group="TestGroup"/>
</dataset>

Проблема следующая: в таблице есть столбец "group" - а это зарезервированное слово. Если оставить как есть, при запуске выдает ошибку: Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "group"

Нашел вот такое решение, но не помогает. В датасете обернул group

<shop id="TESTID" shop_type="Type1" has_source="false" version="2" `group`="TestGroup"/>

В конфигурацию теста добавил configBean.setEscapePattern();

        @Bean 
        DatabaseConfigBean configBean() {
            final var configBean = new DatabaseConfigBean();
            configBean.setDatatypeFactory(new PostgreDataTypeFactory());
//пробовал по разному
//            configBean.setEscapePattern("[?]");
//            configBean.setEscapePattern("[group]");
            configBean.setEscapePattern("`?`");
            return configBean;
        }

        @Bean DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection(DatabaseConfigBean configBean,
                                                                               DataSource dataSource) {
            final var factoryBean = new DatabaseDataSourceConnectionFactoryBean();
            factoryBean.setDatabaseConfig(configBean);
            factoryBean.setDataSource(dataSource);
            factoryBean.setSchema("mySchemeName");
            return factoryBean;
        }

org.dbunit.dataset.DataSetException: Line 2: Element type "shop" must be followed by either attribute specifications, ">" or "/>".

Что делаю не так?

Ответы

Ответов пока нет.