使用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.PostgreSQL9DialectMySQL配置:
spring.datasource.driver- class -name=org.testcontainers.jdbc.ContainerDatabaseDriver spring.datasource.url=jdbc:tc:mysql: 8 : /// spring.jpa.database-platform=org.hibernate.dialect.MySQL8DialectMariaDB配置:
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测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsr303自定义验证_JSR 310新
- 下一篇: 二恶英是什么东西(简述二恶英的危害以及主