Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Spring boot 防止在JUnit中执行jpa@Query_Spring Boot_Junit_H2 - Fatal编程技术网

Spring boot 防止在JUnit中执行jpa@Query

Spring boot 防止在JUnit中执行jpa@Query,spring-boot,junit,h2,Spring Boot,Junit,H2,我有一个SpringBoot项目(版本2.3.1.RELEASE),我正在尝试不使用数据库(都是模拟的)编写JUnit测试 为此,我配置了一个junit环境H2作为数据库 spring.datasource.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.datasource.url=jdbc:h2:mem:db;TRACE_LEVEL_FIlE=4 spring.datasource.username=sa spring

我有一个SpringBoot项目(版本2.3.1.RELEASE),我正在尝试不使用数据库(都是模拟的)编写JUnit测试

为此,我配置了一个junit环境H2作为数据库

spring.datasource.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.url=jdbc:h2:mem:db;TRACE_LEVEL_FIlE=4
spring.datasource.username=sa
spring.datasource.password=
有了这个非常常规的存储库

public interface AccountRepository extends JpaRepository<Account, Long> {

@Query("SELECT A FROM Account A WHERE "
            + "A.state='PENDING' AND "
            + "P.origin='WS' AND "
            + "UPPER(P.type)='R'")
    public List<Account> pending();
}
当我在junit测试中运行ControllerTests时,我的问题就出现了。在引导时,它会抱怨:

2020-10-20 20:37:38 WARN  -  WARN - org.hibernate.engine.jdbc.spi.SqlExceptionHelper -  SQL Error: 42102, SQLState: 42S02
2020-10-20 20:37:38 ERROR - ERROR - org.hibernate.engine.jdbc.spi.SqlExceptionHelper -  Table "AP_ACCOUNTS" not found; SQL statement:
这是因为他试图检查这个查询。但是H2是空的(我想要的方式)


有没有办法在引导时禁用JpaRepositories的查询执行?

该解决方案有两个分支,应用于每个测试类:

  • 在ComponentScan中,必须排除存储库
  • 因此,所有带有@Query的bean必须位于所有扫描组件之外

  • 组件自动布线存储库在任何时候都必须模拟,即使它们未被使用
  • 2020-10-20 20:37:38 WARN  -  WARN - org.hibernate.engine.jdbc.spi.SqlExceptionHelper -  SQL Error: 42102, SQLState: 42S02
    2020-10-20 20:37:38 ERROR - ERROR - org.hibernate.engine.jdbc.spi.SqlExceptionHelper -  Table "AP_ACCOUNTS" not found; SQL statement:
    
        @ComponentScan(Constant.ROOT_PACKAGE + ".helper")
    
        @MockBean
        private AccountRepository accountRepositoryMock;