DBUnit с Postgresql и чувствительностью к регистру имен столбцов - как это работает?

Я пытаюсь написать интеграционные тесты для нашего приложения Spring Boot. Мы хотим использовать spring-test-dbunit и dbunit для настройки и анализа данных теста в базе данных Postgresql 9.4.2 с пустой схемой.

После борьбы с нечувствительными к регистру именами таблиц, которые я мог легко решить, установив для свойства конфигурации DBUnit caseSensitiveTableNames значение true, у меня возникла та же проблема с именами столбцов, но я не могу понять, как заставить DBUnit понять, что Postgresql не хорошо в верхнем регистре.

Вот мой (упрощенный) набор данных:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
    <customer_status status_id="0" descripton="description" />
</dataset>

И вот мой основной контрольный пример:

@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class, DbUnitTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = IntegrationTestConfig.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
@DbUnitConfiguration(databaseConnection="dbUnitDatabaseConnection")
@DatabaseSetup("classpath:datasets/authentication/oauth_setup.xml")
@DatabaseTearDown(type = DatabaseOperation.DELETE_ALL, value = { "classpath:datasets/authentication/oauth_setup.xml" })
@DirtiesContext
public class OauthIntegrationTest {

    @Value("${local.server.port}")
    int port;

    @Test
    public void thatStuffIsHappening() {
        //here be stuff (test fails on dbunit setup)    
    }
}

И, наконец, это моя конфигурация DBUnit:

@Import({ ControllerConfig.class, PersistenceConfig.class })
public class IntegrationTestConfig extends App {

    @Autowired
    DataSource dataSource;

    @Bean
    public DatabaseConfigBean dbUnitDatabaseConfig() {
        final DatabaseConfigBean dbConfig = new DatabaseConfigBean();
        dbConfig.setDatatypeFactory(new PostgresqlDataTypeFactory());
        dbConfig.setCaseSensitiveTableNames(true);
        return dbConfig;
    }

    @Bean
    public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() {
        final DatabaseDataSourceConnectionFactoryBean connection = new DatabaseDataSourceConnectionFactoryBean();
        connection.setDataSource(this.dataSource);
        connection.setDatabaseConfig(this.dbUnitDatabaseConfig());
        connection.setSchema("public");
        return connection;
      }
  }

Запуск теста заканчивается этой ошибкой:

org.dbunit.dataset.NoSuchColumnException: customer_status.DESCRIPTON - (входной столбец не в верхнем регистре: дескрипт) в карте кэша ColumnNameToIndexes. Обратите внимание, что имена столбцов карты НЕ чувствительны к регистру.

Что правильно, потому что все имена столбцов в PSQL строчные. Почему DBUnit переводит их в верхний регистр, и есть ли способ предотвратить это?

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

Есть намеки? Я не могу поверить, что это серьезная проблема, и не только я что-то упускаю из виду...

1 ответ

О, боже мой, это только что стало серьезной проблемой. В моем файле setup.xml была опечатка. Вместо "описание" я написал "дескрипт".

Теперь это работает, и в этом нет ничего плохого, кроме моих навыков набора текста и чтения.;)

Другие вопросы по тегам