1.7. 使用 PostgreSQL 的 Dev Services 来测试应用程序
在以生产环境模式运行应用程序前,在 JVM 和原生模式中使用 Dev Services 完成应用程序的集成测试。
首先,将以下依赖项添加到 test 项目中:
使用 Maven:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency>使用 Gradle:
testImplementation("io.rest-assured:rest-assured")
以 dev 模式运行应用程序:
使用 Quarkus CLI:
quarkus dev使用 Maven:
./mvnw quarkus:dev使用 Gradle:
./gradlew --console=plain quarkusDev
以下属性配置演示了如何使 PostgreSQL 测试仅在生产(prod)模式下运行。在这种情况下,PostgreSQL 的 Dev Services 启动并配置 PostgreSQL 测试容器。
%prod.quarkus.datasource.db-kind=postgresql
%prod.quarkus.datasource.username=quarkus
%prod.quarkus.datasource.password=quarkus
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost/quarkus
quarkus.hibernate-orm.database.generation=drop-and-create
如果您添加 %prod. 配置集前缀,则数据源属性对 PostgreSQL 的 Dev 服务 不可见,且仅在 production 模式下运行的应用程序观察到。
要编写集成测试,请使用以下代码示例:
package org.acme.security.jpa;
import static io.restassured.RestAssured.get;
import static io.restassured.RestAssured.given;
import static org.hamcrest.core.Is.is;
import org.apache.http.HttpStatus;
import org.junit.jupiter.api.Test;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
public class JpaSecurityRealmTest {
@Test
void shouldAccessPublicWhenAnonymous() {
get("/api/public")
.then()
.statusCode(HttpStatus.SC_OK);
}
@Test
void shouldNotAccessAdminWhenAnonymous() {
get("/api/admin")
.then()
.statusCode(HttpStatus.SC_UNAUTHORIZED);
}
@Test
void shouldAccessAdminWhenAdminAuthenticated() {
given()
.auth().preemptive().basic("admin", "admin")
.when()
.get("/api/admin")
.then()
.statusCode(HttpStatus.SC_OK);
}
@Test
void shouldNotAccessUserWhenAdminAuthenticated() {
given()
.auth().preemptive().basic("admin", "admin")
.when()
.get("/api/users/me")
.then()
.statusCode(HttpStatus.SC_FORBIDDEN);
}
@Test
void shouldAccessUserAndGetIdentityWhenUserAuthenticated() {
given()
.auth().preemptive().basic("user", "user")
.when()
.get("/api/users/me")
.then()
.statusCode(HttpStatus.SC_OK)
.body(is("user"));
}
}
如此代码示例中所示,您不需要从测试代码启动测试容器。
当您以 dev 模式启动应用程序时,PostgreSQL 的 Dev Services 会启动 PostgreSQL dev 模式容器,以便您开始开发应用程序。在开发应用程序时,您可以使用 持续 测试功能单独添加和运行测试。用于 PostgreSQL 的 Dev Services 支持在开发过程中通过提供与 dev 模式容器不冲突的独立 PostgreSQL 测试容器进行测试。