Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SQL查询进行Spring引导组件测试_Java_Sql_Spring Boot_Junit_Mybatis - Fatal编程技术网

Java 使用SQL查询进行Spring引导组件测试

Java 使用SQL查询进行Spring引导组件测试,java,sql,spring-boot,junit,mybatis,Java,Sql,Spring Boot,Junit,Mybatis,我正在尝试为sql查询设置组件测试。为了处理SQL,我使用myBatis 我有一个测试数据源配置,它正在创建一个嵌入式H2数据库。这对于任何简单的查询都很有效 我的问题是,我有一个查询使用了H2不支持的SQL公共表表达式(NOLOCK) 我可以让H2忽略NOLOCK部分还是替换junit测试期间使用的查询字符串 myBatis mapper看起来像这样: public interface CoolMapper { @Results(...) @Select("SELECT * F

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

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

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

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

myBatis mapper看起来像这样:

public interface CoolMapper {
    @Results(...)
    @Select("SELECT * FROM cool_table WITH (NOLOCK)")
    List<CoolObject> getThings();
}
公共接口CoolMapper{
@结果(…)
@选择(“使用(NOLOCK)从cool_表中选择*)
List getThings();
}
数据源配置: @配置 公共类测试数据源配置{

    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;
    }
}
publictestingdatasourceconfig(){}
@简介(“测试”)
@Bean(name=“dataSources”)
@初级的
@限定符(数据源配置数据源)
公共地图数据源(){
Map dataSourceMap=newhashmap();
UUID UUID=UUID.fromString(“dac46f50-a1fb-3434-b262-0c0c4564b117”);
EmbeddedDatabase=新建EmbeddedDatabaseBuilder()。generateUniqueName(true)
.setType(EmbeddedDatabaseType.H2)
.SetScript编码(“UTF-8”)
.ignoreFailedDrops(真)
.addDefaultScripts()
.build();
dataSourceMap.put(uuid,数据库);
返回数据源地图;
}
}

有时您只需要一个真正的运行时环境,就像这里需要一个专有数据库。在这些情况下,不要试图将此作为单元测试来进行。将其作为验收/系统测试的一部分—即部署到dev(或QA,无论什么)服务器上后在应用程序上运行的测试。

我认为会是这种情况,但在给出测试之前想先看看up@steve你必须问自己“我到底在测试什么”。不要费心测试数据库是否知道关键字NOLOCK的含义。可以相信它会这样做。我同意,如果我能找到一种方法,在使用测试概要文件时,用H2兼容的选择替换这些静态SQL字符串,我将完全设置好。有人做了一个在查询中丢弃SQLServer表提示(
,with
子句)的测试,但该项目已经有几年的历史了。如果您的应用程序应该从其他事务中读取未提交的数据(这就是
WITH(NOLOCK)
的基本意思),那么您需要一个真正的SQLServer实例进行测试。