1.7. 使用 PostgreSQL 的 Dev Services 以 dev 模式测试您的应用程序


在以生产环境模式运行应用程序前,在 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 的 Dev Services 启动并配置 PostgreSQL 测试容器。确保在您的计算机上安装了 PodmanDocker

要编写集成测试,请使用以下代码示例:

src/test/java/org/acme/security/jpa/JpaSecurityRealmTest.java

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"));
    }
}

如此代码示例中所示,您不需要从测试代码启动测试容器。

要运行这些测试,请选择 Press [r] 来恢复测试 选项,该选项会在您以 dev 模式启动应用后在控制台中显示。

注意

当您以 dev 模式启动应用程序时,PostgreSQL 的 Dev Services 会启动 PostgreSQL dev 模式容器,以便您开始开发应用程序。在开发应用程序时,您可以使用 持续 测试功能单独添加和运行测试。用于 PostgreSQL 的 Dev Services 支持在开发过程中通过提供与 dev 模式容器不冲突的独立 PostgreSQL 测试容器进行测试。

另外,您可以使用 Maven 运行这些测试:

./mvnw test
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部