Testcontainers是一个Java库,可轻松将Docker容器集成到JUnit测试中。 在Containerized World中 ,将测试配置与嵌入式数据库和服务复杂化几乎没有意义。 而是使用在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测试配置Testcontainers的步骤:

  • 将驱动程序设置为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

也可以看看

  • 使用JUnit 5进行Spring Boot测试
  • 带有PostgreSQL的Docker Compose for Spring Boot应用程序

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

使用Testcontainers和PostgreSQL,MySQL或MariaDB的Spring Boot测试相关推荐

  1. 带有PostgreSQL的Docker Compose for Spring Boot应用程序

    在此博客文章中,您将学习如何使用PostgreSQL配置Spring Boot应用程序以与Docker Compose一起运行. 这篇博客文章涵盖: Spring Boot应用程序Dockerfile ...

  2. springboot mysql事物_在Spring Boot中使用数据库事务

    关于数据库访问还有一个核心操作那就是事务的处理了,前面两篇博客小伙伴们已经见识到Spring Boot带给我们的巨大便利了,其实不用猜,我们也知道Spring Boot在数据库事务处理问题上也给我们带 ...

  3. 如何使用MySQL和JPA使用Spring Boot构建Rest API

    Hi Everyone! For the past year, I have been learning JavaScript for full-stack web development. For ...

  4. 【SpringBoot】Spring boot 测试类 找到不到MySQL 驱动

    1.背景 写了一个Spring boot 项目,引入了MySQL <dependency><groupId>mysql</groupId><artifactI ...

  5. jpa执行mysql存储过程_基于Spring Boot,使用JPA调用Sql Server数据库的存储过程并返回记录集合...

    那么,有些情况,会把一些查询语句写在存储过程中,由存储过程来返回记录集. 在这里就先通过EntityManager创建命名存储过程的方法完成调用. 1.创建SQL存储过程 存储过程返回所有的联系人. ...

  6. mysql connector开源协议_Spring Boot 集成 MariaDB Connector/J 连接 MySQL

    本文介绍 Spring Boot 2 集成 MariaDB Connector/J 驱动连接 MySQL 数据库的方法. 目录 MariaDB Connector/J 简介 版本说明 代码示例 Mar ...

  7. 使用PostgreSQL使用Spring Boot和JPA构建基本应用

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 每个不平 ...

  8. Spring Boot(六)集成 MyBatis 操作 MySQL 8

    ## 一.简介 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果 ...

  9. mysql快速启动_GitHub - TianSiQiang/Spring-Boot-MyBatis-Mysql: Spring Boot+MyBatis+Mysql 快速启动示例...

    Spring Boot+MyBatis+Mysql 添加依赖 引入 lombok.mysql-connector-java .mybatis-plus-boot-starter 依赖: org.pro ...

最新文章

  1. 每日一皮:程序员的生存状态 ...
  2. 图解命令行手动编译构建一个win32汇编程序
  3. linux基本项目环境搭建
  4. 37. Sudoku Solver
  5. mysql做主从复制配置案例
  6. MyBatis 缓存原来是这么一回事儿!| 原力计划
  7. mysql6获取不到连接_codesmith6.5连接Mysql提示“找不到请求的 .Net Framework Data Provider。可能没有安装。”解决方法...
  8. 关于javaweb中sql语句中使用变量的情况
  9. ISAKMP主模式分析二
  10. 树莓派4B无屏幕安装系统及联网使用VNC无线投屏功能
  11. WPF Binding表达式
  12. 数据结构与算法(零)-前言
  13. 80psi等于多少kpa_【图】关于胎压的换算psi、bar,kpa
  14. 如何计算每个月有多少天
  15. 将示波器数据传入电脑用matlab作FFT
  16. 拓嘉辰丰:拼多多活动结束,怎样避免流量大跌尴尬期
  17. jmeter性能测试脚本录制不了的几种情况
  18. 三国杀ol服务器维护时间 11月6日,《三国杀OL》11月6日更新内容介绍
  19. debian常用命令整理
  20. nginx访问静态资源报404错误

热门文章

  1. 欢乐纪中某A组赛【2019.7.8】
  2. P1768-天路【负环,SPFA,01分数规划,二分答案】
  3. ssl1776-游乐场【图论,深搜】
  4. 【Floyed】小萨的烦恼(ssl 1624)
  5. Hadoop入门(九)Mapreduce高级shuffle之Combiner
  6. 跟我学 Java 8 新特性之 Stream 流(六)收集
  7. java反射 修改静态方法的值 setAccessible
  8. Git 12 岁了,送给你 12 个 Git 使用技巧
  9. 什么是CPU密集型、IO密集型?
  10. 漫画:什么是volatile关键字?(整合版)