日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2023/12/3 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Testcontainers和PostgreSQL,MySQL或MariaDB的Spring Boot测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Testcontainers是一個Java庫,可輕松將Docker容器集成到JUnit測試中。 在Containerized World中 ,將測試配置與嵌入式數據庫和服務復雜化幾乎沒有意義。 而是使用在Docker中運行您的服務,并讓Testcontainers為您管理此服務。

在此博客文章中,您將學習如何在Spring Boot 2集成測試中配置Testcontainer以運行PostgreSQL,MySQL和MariaDB。

這篇博客文章涵蓋:

  • 使用PostgreSQL , MySQL和MariaDB進行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 >

其中DATABASE是postgresql , mysql和mariadb 。

注意: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测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。