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

标签 java sql spring-boot junit mybatis

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

我有一个测试数据源配置,用于创建嵌入式 H2 数据库。这对于任何简单的查询都很有效。

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

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

myBatis 映射器看起来像这样:

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

数据源配置: @配置 公共(public)类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;
    }
}

最佳答案

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

关于java - 使用 SQL 查询进行 Spring Boot 组件测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48603618/

相关文章:

java - Xquery 正在返回一组元素的结果而不是其他元素?

java - Android SQLite 错误,NullPointerException 是我存在的祸根

php - 如何找到不在这个数组中的所有记录? (MySql)

mysql - 在没有 Intersect 的 MariaDB 中进行 Intersect 查询时出错

java - 尝试用问号替换字符串中的字母,但继续用问号替换空格

java - 使用 Tika 进行递归爬网的 Storm Crawler 配置

MySQL查询超过3个表

java - 使用 PostgreSQL 和 Spring Boot 时是否有规则禁止将其实体类命名为 "User"?

java - 如何使用 Spring Boot 和 Angular 7 配置 CRSF

java - Maven Spring Boot 应用程序卡住