1.7. PostgreSQL 用 Dev Services を使用したアプリケーションのテスト


アプリケーションを実稼働モードで実行する前に、Dev Services for PostgreSQL を使用して JVM およびネイティブモードでアプリケーションの統合テストを完了します。

まず、テストプロジェクトに次の依存関係を追加します。

  • Maven を使用:

    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <scope>test</scope>
    </dependency>
    Copy to Clipboard Toggle word wrap
  • Gradle を使用:

    testImplementation("io.rest-assured:rest-assured")
    Copy to Clipboard Toggle word wrap

アプリケーションを dev モードで実行するには、以下を実行します。

  • Quarkus CLI を使用:

    quarkus dev
    Copy to Clipboard Toggle word wrap
  • Maven を使用:

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
  • Gradle を使用:

    ./gradlew --console=plain quarkusDev
    Copy to Clipboard Toggle word wrap

次のプロパティー設定は、PostgreSQL テストを本番 (prod) モードでのみ実行できるようにする方法を示しています。このシナリオでは、Dev Services for PostgreSQLPostgreSQL テストコンテナーを起動して設定します。

%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
Copy to Clipboard Toggle word wrap

%prod. プロファイル接頭辞を追加すると、データソースプロパティーは Dev Services for PostgreSQL には表示されず、運用モードで実行されているアプリケーション以外には監視されません。

統合テストを記述するには、次のコードサンプルを使用します。

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"));
    }
}
Copy to Clipboard Toggle word wrap

このコードサンプルからわかるように、テストコードからテストコンテナーを起動する必要はありません。

注記

開発モードでアプリケーションを起動すると、Dev Services for PostgreSQL は PostgreSQL 開発モードコンテナーを起動して、アプリケーションの開発を開始できるようにします。アプリケーションの開発中に、継続テスト 機能を使用してテストを個別に追加および実行できます。Dev Services for PostgreSQL は、開発モードコンテナーと競合しない別の PostgreSQL テストコンテナーを提供することで、開発中のテストをサポートします。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る