使用辅助 h2 数据库在 Spring 引导中测试 API

Use a secondary h2 database for testing an API in Spring boot

我正在开发 API 来管理我工作的公司的数据库,问题是当我必须 运行 不同的测试时,我必须使用“真实”我有一些真实数据的开发数据库(在 h2 中)。

我考虑了一下,我想做的是创建一个可以在测试阶段启动的新 h2 数据库,并用它来测试我所有的控制器方法。

问题是我不知道如何在 Spring Boot.如果你能帮助我,我将不胜感激。

总结一下:

谢谢!

让我们假设您有 2 个环境 - “生产”和“测试”。

第一步:为每个环境定义一个配置文件

为每个环境保留一个 application.properties 个文件。每个都将包含其自己的数据库设置。像这样:

制作:application-production.properties

#Start: For MySQL 8.0 database.
spring.datasource.url= jdbc:mysql://${DB_IP}:${DB_PORT}/${DB_SCHEMA}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWD}
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
#End: For MySQL 8.0 database.

spring.sql.init.platform=mysql

测试: application-testing.properties

# Start: For H2 in-memory database.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=secret
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
# End: For H2 in-memory database.

spring.sql.init.platform=h2

第 2 步:构建您的应用程序可启动 JAR

这里没有什么好解释的。 :)

第 3 步:在 运行 JAR

时传递配置文件名称
  • 测试环境: $ java -jar -Dspring.profiles.active=testing <spring-boot-application-jar>
  • 对于生产环境: $ java -jar -Dspring.profiles.active=production <spring-boot-application-jar>

第一个将使用 application-testing.properties,第二个将使用 application-production.properties

还有一些其他因素,例如 application.properties 中的默认属性和基于配置文件的属性中的特定属性等,您可以在 Spring docs.

上阅读这些因素