postgresql测试题
Testcontainers是一个Java库,可轻松将Docker容器集成到JUnit测试中。 在Containerized World中 ,将测试配置与嵌入式数据库和服务复杂化几乎没有意义。 而是使用在Docker中运行您的服务,并让Testcontainers为您管理此服务。 因此,如果您在测试中需要Redis,MongoDB或PostgreSQL – Testcontainer可能会成为您的好朋友。
在此博客文章中,您将学习如何在Quarkus集成测试中配置Testcontainer以管理PostgreSQL实例。
依存关系
为了将Testcontainers与PostgreSQL一起使用,您需要将以下依赖项添加到pom.xml
:
- <dependency>
- <groupId>org.testcontainers</groupId>
- <artifactId>testcontainers</artifactId>
- <version>1.12.5</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.testcontainers</groupId>
- <artifactId>postgresql</artifactId>
- <version>1.12.5</version>
- <scope>test</scope>
- </dependency>
注意:Testcontainers提供了JUnit 5插件,但是在本文介绍的场景中不需要它。
测试数据源配置
Quarkus应用程序中的默认PostgreSQL配置如下所示:
- quarkus.datasource.url=jdbc:postgresql://localhost:5432/some-db
- quarkus.datasource.driver=org.postgresql.Driver
- quarkus.datasource.username=user
- quarkus.datasource.password=password
默认情况下,此配置将在任何活动配置文件中使用。 Quarkus中的内置配置文件是: dev
, prod
和test
。 每当您运行@QuarkusTest
时,都会使用该test
配置文件。
您可以通过提供%test.
来调整test
配置文件%test.
src/main/application.properties
文件中配置属性的前缀。 这允许通过JDBC URL方案配置(和启动)PostgreSQL数据库容器。 为此,请确保:
- 将驱动程序设置为
org.testcontainers.jdbc.ContainerDatabaseDriver
。 这个特殊的驱动程序可确保在应用程序中需要数据源后就创建并运行Docker容器, - 将方言明确设置为
org.hibernate.dialect.PostgreSQL9Dialect
否则在启动应用程序时会出现异常:
org.junit.jupiter.api.extension.TestInstantiationException: TestInstanceFactory [io.quarkus.test.junit.QuarkusTestExtension] failed to instantiate test class [pl.codeleak.samples.OwnerResourceTest]: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[错误]
:生成步骤io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor#build引发了一个异常:io.quarkus.deployment.configuration.ConfigurationError:Hibernate扩展无法从驱动程序org.testcontainers.jdbc.ContainerDatabaseDriver猜得到方言。 添加一个明确的“ quarkus.hibernate-orm.dialect”属性。 在io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor.guessDialect(HibernateOrmProcessor.java:715)
- 将JDBC URL设置为
jdbc:tc:postgresql:latest:///dbname
以便Testcontainers知道在运行容器时要使用哪个PostgreSQL版本。
完整的配置:
- # initializes container for driver initialization
- %test.quarkus.datasource.driver=org.testcontainers.jdbc.ContainerDatabaseDriver
-
- # dialect must be set explicitly
- %test.quarkus.hibernate-orm.dialect=org.hibernate.dialect.PostgreSQL9Dialect
-
- # Testcontainers JDBC URL
- %test.quarkus.datasource.url=jdbc:tc:postgresql:latest:///dbname
使用适当的配置后,您可以运行测试并观察是否已为测试创建了测试容器:
- $ ./mvnw clean test
-
- [INFO] -------------------------------------------------------
- [INFO] T E S T S
- [INFO] -------------------------------------------------------
- [INFO] Running pl.codeleak.samples.OwnerResourceTest
- 2020-02-27 21:09:21,096 INFO [io.qua.fly.FlywayProcessor] (build-8) Adding application migrations in path '/Users/rafal.borowiec/Projects/quarkus/quarkus-postgres-sample/target/classes/db/migration' using protocol 'file'
- 2020-02-27 21:09:23,084 INFO [org.fly.cor.int.lic.VersionPrinter] (main) Flyway Community Edition 6.1.4 by Redgate
- 2020-02-27 21:09:23,176 INFO [org.tes.doc.DockerClientProviderStrategy] (Agroal_1012722761) Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
- 2020-02-27 21:09:23,658 INFO [org.tes.doc.UnixSocketClientProviderStrategy] (Agroal_1012722761) Accessing docker with local Unix socket
- 2020-02-27 21:09:23,659 INFO [org.tes.doc.DockerClientProviderStrategy] (Agroal_1012722761) Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
- 2020-02-27 21:09:23,780 INFO [org.tes.DockerClientFactory] (Agroal_1012722761) Docker host IP address is localhost
- 2020-02-27 21:09:23,815 INFO [org.tes.DockerClientFactory] (Agroal_1012722761) Connected to docker:
- Server Version: 19.03.2
- API Version: 1.40
- Operating System: Docker Desktop
- Total Memory: 1998 MB
- 2020-02-27 21:09:23,957 INFO [org.tes.uti.RegistryAuthLocator] (Agroal_1012722761) Credential helper/store (docker-credential-desktop) does not have credentials for quay.io
- 2020-02-27 21:09:24,857 INFO [org.tes.DockerClientFactory] (Agroal_1012722761) Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
- 2020-02-27 21:09:24,857 INFO [org.tes.DockerClientFactory] (Agroal_1012722761) Checking the system...
- 2020-02-27 21:09:24,858 INFO [org.tes.DockerClientFactory] (Agroal_1012722761) ✔︎ Docker server version should be at least 1.6.0
- 2020-02-27 21:09:25,040 INFO [org.tes.DockerClientFactory] (Agroal_1012722761) ✔︎ Docker environment should have more than 2GB free disk space
- 2020-02-27 21:09:25,078 INFO [声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/401047推荐阅读
相关标签