postgresql_使用Testcontainers和PostgreSQL,MySQL或MariaDB的Spring Boot测试

postgresql

postgresql

Testcontainers是一个Java库,可轻松将Docker容器集成到JUnit测试中。 在容器世界中,将测试配置与嵌入式数据库和服务复杂化几乎没有意义。 而是使用在Docker中运行您的服务,并让Testcontainers为您管理此服务。

在此博客文章中,您将学习如何在Spring Boot 2集成测试中配置Testcontainer以运行PostgreSQL,MySQL和MariaDB。

这篇博客文章涵盖:

  • 使用PostgreSQLMySQLMariaDB进行Spring Boot 2测试的Testcontainers配置(通过JDBC URL Scheme )
  • @DataJpaTest中的@DataJpaTest

依存关系

为了使用Testcontainers,将以下依赖项添加到pom.xml (假设基于Maven的项目):

 < properties >

    < org.testcontainers.version >1.12.5</ org.testcontainers.version >
 </ properties >
 < dependency >

    < groupId >org.testcontainers</ groupId >

    < artifactId >testcontainers</ artifactId >

    < version >${org.testcontainers.version}</ version >

    < scope >test</ scope >
 </ dependency >
 < dependency >

    < groupId >org.testcontainers</ groupId >

    < artifactId >DATABASE</ artifactId >

    < version >${org.testcontainers.version}</ version >

    < scope >test</ scope >
 </ dependency >

其中DATABASEpostgresqlmysqlmariadb

注意:Testcontainers提供了JUnit 5(Jupiter)插件,但是在这种情况下,不需要该插件。

测试数据源配置

为Spring Boot测试配置Testcontainer的步骤:

  • 将驱动程序设置为org.testcontainers.jdbc.ContainerDatabaseDriver ,它是Testcontainers JDBC代理驱动程序。 初始化数据源时,此驱动程序将负责启动所需的Docker容器。
  • 将方言明确设置为数据库的方言实现,否则在启动应用程序时会收到异常。 当您在应用程序中使用JPA时(通过Spring Data JPA ),此步骤是必需的
  • 将JDBC URL设置为jdbc:tc:<database-image>:<version>:///以便Testcontainers知道要使用哪个数据库映像。

PostgreSQL配置:

完整的配置:

 spring.datasource.driver- class -name=org.testcontainers.jdbc.ContainerDatabaseDriver
 spring.datasource.url=jdbc:tc:postgresql: 9.6 : ///
 spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL9Dialect

MySQL配置:

 spring.datasource.driver- class -name=org.testcontainers.jdbc.ContainerDatabaseDriver
 spring.datasource.url=jdbc:tc:mysql: 8 : ///
 spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

MariaDB配置:

 spring.datasource.driver- class -name=org.testcontainers.jdbc.ContainerDatabaseDriver
 spring.datasource.url=jdbc:tc:mariadb: 10.3 : ///
 spring.jpa.database-platform=org.hibernate.dialect.MariaDB103Dialect

在此处的官方文档中查看有关数据库配置的更多信息: https : //www.testcontainers.org/modules/databases/

使用Testcontainers初始化测试数据库

您可以使用Testcontainers加载的脚本来初始化数据库。 可以直接从类路径或从任何位置加载文件。 唯一要做的就是更改JDBC URL:

spring.datasource.url=jdbc:tc:postgresql: 9.6 : ///?TC_INITSCRIPT=file:src/main/resources/init_db.sql spring.datasource.url=jdbc:tc:postgresql: ///?TC_INITSCRIPT=file:src/main/resources/init_db.sql : ///?TC_INITSCRIPT=file:src/main/resources/init_db.sql

要么

spring.datasource.url=jdbc:tc:postgresql: 9.6 : ///?TC_INITSCRIPT=classpath:init_db.sql spring.datasource.url=jdbc:tc:postgresql: ///?TC_INITSCRIPT=classpath:init_db.sql : ///?TC_INITSCRIPT=classpath:init_db.sql

@DataJpaTest

为了在@DataJpaTest使用TC,您需要确保使用应用程序定义的(自动配置的)数据源。 您可以通过使用@AutoConfigureTestDatabase注释测试来轻松完成此@AutoConfigureTestDatabase ,如下所示:

 @DataJpaTest
 @AutoConfigureTestDatabase (replace = AutoConfigureTestDatabase.Replace.NONE)
 public class OwnerRepositoryTests { 
    @Autowired

    private OwnerRepository ownerRepository; 
    @Test

    void findAllReturnsJohnDoe() { // as defined in tc-initscript.sql

        var owners = ownerRepository.findAll();

        assertThat(owners.size()).isOne();

        assertThat(owners.get( 0 ).getFirstName()).isEqualTo( "John" );

        assertThat(owners.get( 0 ).getLastName()).isEqualTo( "Doe" );

    }
 }

@SpringBootTest

@SpringBootTest将使用应用程序定义的数据源,因此不需要其他更改。

 @SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 @AutoConfigureMockMvc
 public class OwnerResourceTests { 
    @Autowired

    WebApplicationContext wac;

    @Test

    void findAllReturnsJohnDoe() throws Exception {

        given()

                .webAppContextSetup(wac)

        .when()

                .get( "/owners" )

        .then()

                .status(HttpStatus.OK)

                .body(

                        "_embedded.owners.firstName" , containsInAnyOrder( "John" ),

                        "_embedded.owners.lastName" , containsInAnyOrder( "Doe" )

                );

    }
 }

概要

您刚刚了解了在Spring Boot集成测试中使用Testcontainers配置PostgreSQL,MySQL和MariaDB的最简单方法。 该解决方案非常适合简单的设置。 如果您需要对Docker映像的更多控制,请查阅Testcontainers官方文档。

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/spring-boot-tc

也可以看看

翻译自: https://www.javacodegeeks.com/2020/04/spring-boot-tests-with-testcontainers-and-postgresql-mysql-or-mariadb.html

postgresql

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值