使用SQL查询进行Spring Boot组件测试

时间:2018-02-04 00:48:02

标签: java sql spring-boot junit mybatis

我正在尝试为sql查询设置组件测试。要处理我正在使用myBatis的SQL。

我有一个测试dataSource配置,它正在创建一个嵌入式H2数据库。这适用于任何简单的查询。

我的问题是我有一个查询,它使用H2不支持的SQL公用表表达式(NOLOCK)。

我可以让H2忽略NOLOCK部分或替换junit测试期间使用的查询字符串吗?

myBatis mapper看起来像这样:

public interface CoolMapper {
    @Results(...)
    @Select("SELECT * FROM cool_table WITH (NOLOCK)")
    List<CoolObject> getThings();
}

数据源配置:     @组态     公共类TestingDataSourceConfig {

    public TestingDataSourceConfig() {}

    @Profile("test")
    @Bean(name = "dataSources")
    @Primary
    @Qualifier(DataSourceConfig.DATA_SOURCES)
    public Map<UUID, DataSource> dataSources() {
        Map<UUID, DataSource> dataSourceMap = new HashMap<>();
        UUID uuid = UUID.fromString("dac46f50-a1fb-3434-b262-0c0c4564b117");

        EmbeddedDatabase database = new EmbeddedDatabaseBuilder().generateUniqueName(true)
                .setType(EmbeddedDatabaseType.H2)
                .setScriptEncoding("UTF-8")
                .ignoreFailedDrops(true)
                .addDefaultScripts()
                .build();

        dataSourceMap.put(uuid, database);

        return dataSourceMap;
    }
}

1 个答案:

答案 0 :(得分:1)

有时您只需要一个真正的运行时环境,就像您需要专有数据库一样。在这些情况下,不要尝试将其作为单元测试。将其作为验收/系统测试的一部分 - 即您的应用程序在部署到您的开发(或QA,无论如何)服务器后运行的测试。