如何更改数据库测试

时间:2017-07-20 13:18:05

标签: spring-boot

我使用spring boot 2.0并使用Postgres作为数据库部分。

有没有办法使用postgres数据库而不是内存数据库或某些东西h2或hsqldb进行测试?

2 个答案:

答案 0 :(得分:1)

将PostgreSQL依赖项放到类路径中(Maven pom.xml示例):

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

更新application.yml配置文件:

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/dbname?user=dbuser&password=dbpasswd
    driverClassName: org.postgresql.Driver

在此示例中,JDBC URL使用dbname数据库名称,dbuser用户名和dbpasswd密码。

运行测试时使用PosrgreSQL

您尚未直接指定它,但您可能有兴趣使用PostgreSQL数据库运行集成测试。如果是这样,你有一件事要做。创建一个名为application-it.yml的新配置文件(it代表“集成测试”)并将上面提到的内容放在那里。您还可以将依赖关系定义更改为:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>test</scope>
</dependency>

因此PostgreSQL驱动程序仅在测试范围内可用。接下来,当您编写集成测试时,请使用以下命令对其进行注释:

@ActiveProfiles("it")

因此spring将选择application-it.yml配置文件来设置数据库连接。

  

参考:http://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-connect-to-production-database

奖励:使用嵌入式PostgreSQL

您可能对使用嵌入式PostgreSQL运行集成测试感兴趣。您可以使用此库:

https://github.com/yandex-qatools/postgresql-embedded

在这里,您可以找到一个如何将它与Spring Boot一起用于测试的示例:

https://gist.github.com/Opalo/792c38c689fbedd762670812cb9f7e7c

使用嵌入式PostgreSQL有一个显着优势 - 您无需手动设置数据库。您可以在本地开发以及持续集成服务器中使用它。希望它有所帮助。

答案 1 :(得分:0)

可以在junit测试中编写

@DataJpaTest @AutoConfigureTestDatabase(替换= Replace.NONE)

将使用配置文件的默认数据库