繁体   English   中英

如何在不使用配置文件的情况下覆盖Spring Boot应用程序属性进行测试?

[英]How can I override Spring Boot application properties for tests without using profiles?

我发现有关在Spring Boot中使用主生产数据库和测试内存数据库的典型设置的所有信息非常稀缺。

  • 测试属性没有约定,测试中的application.properties显然会覆盖main中的属性,并且没有诸如application-test.properties-> application.properties之类的回退机制。 我不想使用配置文件,因为我希望它们严格定义环境,这是另一个维度(本地,生产),并且我需要笛卡尔乘积main-local,test-local,main-production,test -生产..

  • 所以我要让Spring为我做魔术,因此我在RepositoryTest上设置了@DataJpaTest批注。 Spring当然可以即时创建H2数据库,但是我找不到找到设置自定义架构或启用H2控制台的方法,因为application.properties被忽略了。

这是最标准的处理方式?

PS我认为这样做的简单方法是通过@SpringBootTest(properties = { "h2.console.enabled: true", "h2.console.path: /myconsole" })覆盖测试中的@SpringBootTest(properties = { "h2.console.enabled: true", "h2.console.path: /myconsole" })但是我找不到@DataJpaTest绑定它们的方式

您可以只在路径src/test/resources提供第二个用于测试的application.yml / application.properties。 位于测试上下文中的一个用于测试,当您运行应用程序时,将使用src/main/resources的文件。

例如,生产配置(使用postgres和ddl-auto validate保留数据)位于src/main/resources

spring:
  datasource:
    url: jdbc:postgresql://localhost/postgres
    username: postgres
    password: postgres
    driver-class-name: org.postgresql.Driver
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    hibernate:
      ddl-auto: validate

并将测试配置(使用H2和ddl-auto create-drop)放置在src/test/resources

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: create-drop

暂无
暂无

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

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