繁体   English   中英

使用 @DataJpaTest 的测试未使用嵌入式内存数据库

[英]Tests with @DataJpaTest are not using embedded in-memory database

根据DataJpaTest 文档,使用@DataJpaTest注释的测试将默认使用嵌入式内存数据库(h2)

默认情况下,使用 @DataJpaTest 注释的测试是事务性的,并在每个测试结束时回滚。 他们还使用嵌入式内存数据库(替换任何显式或通常自动配置的数据源)。 @AutoConfigureTestDatabase 注释可用于覆盖这些设置。

但在我的情况下,它没有发生,用@DataJpaTest 注释的测试@DataJpaTest正在加载 postgres 方言而不是使用 h2 方言。

下面是来自 main/resources 的属性文件

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/postgres?currentSchema=test
    username: test
    password: test
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect

发生了什么

我发现 spring 没有从 main/resources 的application.yml文件中选择方言,而不是尊重@DataJpaTest并使用 h2 方言。

解决方案

在尝试使用 jpa 属性的不同变体时,我发现仅当应用程序属性文件中存在database-platform属性时才会发生此问题。 如果此属性被删除,那么它会加载测试用例的 h2 方言和主应用程序的 postgres 方言。

为什么?

这似乎是 spring 代码库中的一个错误,因为没有记录表明需要删除database-platform属性以使@DataJpaTest使用内存数据库。

根据本文档,关于database-platform属性还有一个更混乱的地方

spring.jpa.database-platform

要操作的目标数据库的名称,默认自动检测。 也可以使用“数据库”枚举进行设置。

似乎是文档中的另一个错误,因为spring.jpa.database-platform仅接受方言 class 作为值,没有其他枚举值将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM