10.2. Microshed Testing ライブラリーでの統合テストの作成

コンテナーを使用する異なる環境にアプリケーションをデプロイすることができます。Testcontainers フレームワークを使用すると、テスト環境でコンテナーを使用できます。Microshed Testing は、MicroProfile および Jakarta EE 開発者向けの Java ライブラリーで、実稼働環境でアプリケーションをテストします。Microshed Testing は Testcontainers フレームワークを実装し、テストで開発および実稼働パリティーをサポートします。

MicroShed Testing を使用すると、以下の例のようなインテグレーションテストを作成できます。

@MicroShedTest
public class BasicJAXRSServiceTest {

    @Container
    public static ApplicationContainer app = new ApplicationContainer()
                    .withAppContextRoot("/myservice");

    @RESTClient
    public static PersonService personSvc;

    @Test
    public void testGetPerson() {
        Long bobId = personSvc.createPerson("Bob", 24);
        Person bob = personSvc.getPerson(bobId);

        assertEquals("Bob", bob.name);
        assertEquals(24, bob.age);
        assertNotNull(bob.id);
    }

    @Test
    public void testGetUnknownPerson() {
        assertThrows(NotFoundException.class, () -> personSvc.getPerson(-1L));
    }
}

@MicroShedTest アノテーション は、リポジトリーの Dockerfile ドキュメントを検索し、Docker コンテナーでアプリケーションを起動し、テストの開始前にアプリケーションが準備されるのを待機します。@ Container アノテーション は PersonService クラスの REST Client プロキシーを注入します。これは、実行中のアプリケーションコンテナーで HTTP 要求を送信するのに役立ちます。@RESTClient アノテーションは、HTTP POST リクエストを実行中のコンテナーに送信します。PersonService#createPerson エンドポイントをトリガーし、生成された ID を返します。生成された ID を使用すると、HTTP GET リクエストを送信して、作成されたレコードを読み取ることができます。JSON 応答は、JSON-B トークンを使用して Person オブジェクトに自動的に変換します。@ Test アノテーション は HTTP GET リクエストを送信し、-1 ID がない Person オブジェクトを検索します。アノテーションは、アプリケーションコンテナーが HTTP 404 例外を返すことをアサートします。