postgresql - 带 Postgresql 的 DBUnit 和列名区分大小写 - 它是如何工作的?

标签 postgresql spring-boot dbunit spring-test-dbunit

我正在尝试为我们的 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 - (Non-uppercase input column: descripton) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.

这是正确的,因为 PSQL 中的所有列名都是小写的。为什么 DBUnit 将它们变成大写,有什么方法可以防止这种情况发生吗?

我尝试用谷歌搜索它,但到目前为止唯一符合我的问题的是 this ,但我真的不喜欢恢复到旧版本。

有什么提示吗?我不敢相信这是一个严重的问题,而不仅仅是我忽略了一些东西......

最佳答案

哦,天哪 - 这只是一个主要的面部问题。我的 setup.xml 文件中有错字。我写的不是“描述”,而是“描述”。

现在它可以工作了,除了我的打字和阅读能力之外,没有任何问题。 ;)

关于postgresql - 带 Postgresql 的 DBUnit 和列名区分大小写 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31112963/

相关文章:

sql - PostgreSQL 查询选择除这些以外的所有

mysql - Spring Boot 2.0.x 上的 InnoDB?

java - 将 Spring Boot 1.x 中的 netflix feign 迁移到 Spring Boot 2.x 中的 openfeign

java - DBUnit 测试比较失败

ruby-on-rails - 使用 PostgreSQL 时如何安全地将参数传递给 ActiveRecord#select()

postgresql - Postgres - 截断字符串

sql - 跨两列/数组的 PostgreSQL 搜索/索引(GIN 索引?)

java - Axios 从 React 获取请求到 Spring Boot 应用程序返回网络错误

java - org.dbunit.dataset.NoSuchTableException : Did not find table 'xxx' in schema 'null'

java - 该对象已在集成测试中关闭