在内存数据库中使用 Spring Boot 测试
Posted
技术标签:
【中文标题】在内存数据库中使用 Spring Boot 测试【英文标题】:Spring Boot testing using in memory db 【发布时间】:2013-11-05 08:49:20 【问题描述】:我使用 Spring Boot 创建了一个 Spring Web 项目。 想了解测试周围的实践。我需要一个内存嵌入式数据库,比如 hsql 或 h2 用于我的具有初始 schema.sql 的junit。 在主应用程序上,数据库可以是 mysql 或 oracle
在非 Spring Boot 项目中,我们通常会有一个单独的 applicationcontext.xml,由 Web 应用程序引用,为了进行测试,我们将使用 applicationContext-text.xml
现在,在 Spring Boot 中,一切都是自动创建的,而且 Spring Boot 也被认为是可行的。想知道如何为 Junits 设置一个嵌入式内存数据库,为应用程序设置一个外部数据库(如 MySQL)。
我能想到的一个解决方案是使用配置文件。带有 2 个属性文件 application.properties 和 application-test.properties。并为我的junits使用测试配置文件。
关于我应该采取的方法的任何建议。
【问题讨论】:
【参考方案1】:配置文件确实是推荐的方法。我要做的可能是将内存中实现设置为“默认”配置文件(它是无害的,因为您永远不会更改任何真实数据,因此最好将其设为默认值,以防有人不小心对真实数据库运行它)。就个人而言,我更喜欢将所有外部配置放在一个 application.yml
文件中,但这完全取决于您。在外部配置中,您需要提供有效的驱动程序类和 URL,例如
spring:
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:test;MODE=PostgreSQL
schema: classpath:/schema.sql
---
spring:
profiles: local
datasource:
url: jdbc:postgresql://localhost/test
username: root
password: changeme
driverClassName: org.postgresql.Driver
schema:
(请注意,H2 具有 postgres 兼容模式,因此在生产环境中作为 postgres 的补充非常好。)
【讨论】:
profiles: local
是错字吗?这似乎表明完整的 Postgres 数据库是本地数据库,而内存数据库是用于生产的。
这不是错字。也许您希望配置文件有一个不同的名称,但没有标准或约定。
啊,我没有正确理解你答案的第一段。谢谢戴夫。以上是关于在内存数据库中使用 Spring Boot 测试的主要内容,如果未能解决你的问题,请参考以下文章
在内存数据库中使用 H2 进行 Spring Boot 集成测试
如何在 Spring Boot 测试中连接到内存中的 HSQLDB 以进行查询
使用 Liquibase 为 Spring Boot 应用程序中的单元测试初始化内存 H2
如何在 Spring Boot 中使用 testng 测试数据库调用
在java Spring Boot中,如何在集成测试中将内存中的LDAPConnection对象传递给ldapService?