BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Spring Boot 3.1におけるテストコンテナと開発時コンテナのサポートの強化

Spring Boot 3.1におけるテストコンテナと開発時コンテナのサポートの強化

スタンドアロンでプロダクショングレードのアプリケーションを構築する人気のJavaベースのフレームワークの最新バージョンであるSpring Boot 3.1では、開発時コンテナのサポートが改善された。この新機能は、SpringのデベロッパーアドボケイトであるJosh Long氏が、自身のYouTubeチャンネル「Coffee + Software with Josh Long」で行ったライブ配信で話題になった。また、Spring公式サイトのブログ投稿の 「Spring Boot 3.1'sConnectionDetails abstraction 」では、この新機能についてさらに詳しく説明している。

TestcontainersはオープンソースのJavaライブラリで、一般的なデータベースやSeleniumウェブブラウザなど、Dockerコンテナで実行できるものであれば何でも、軽量で使い捨てのインスタンスを提供する。これは主に、アプリケーションが外部システムと正しくやりとりしているかを確認する必要があり、統合テストに使用される。

以前のバージョンのSpring BootでもTestcontainersはサポートされたが、その統合はそれほどシームレスではない。Spring Boot 3.1では、新しい@ServiceConnectionアノテーションを導入することで、この問題に対処した。このアノテーションは、必要なコードの量を減らし、統合テストとSpring Bootの自動設定の間の "stringly "型付けされた結合を避けることで、Testcontainersを使った統合テストのプロセスを容易にする。開発者が@ServiceConnectionアノテーションをどのように使うか、次の例を見てください。

@ServiceConnectionpublic static PostgreSQLContainer<?> db = new PostgreSQLContainer<>("postgres:13") .withDatabaseName("test") .withUsername("test") .withPassword("test");

Spring Boot 3.1で導入された2つ目の大きな機能は、開発時にTestcontainersを使用することだ。この機能により、開発者はプロダクションコードでTestcontainersを起動し、それらのコンテナに接続するプロパティを設定できる。しかし、この方法では、Testcontainersの依存関係をコンパイルクラスパス上に置く必要があり、これはfat JARに含まれる可能性がある。 Spring Boot 3.1では、Testcontainers依存関係をテストスコープに保持し、テストコード内に新しいmainメソッドを作成することで、より良い方法を提供する。次の例を見てください。

import org.springframework.boot.SpringApplication;public class TestMyApplication {   public static void main(String[] args) {       SpringApplication.from(MyApplication::main).run(args);   }}

このtest-mainメソッドは、新しいSpringApplication.fromメソッドを利用して、プロダクションコードで使われる "real "mainメソッドにデリゲートする。

開発者はアプリケーションの開発中に必要なTestcontainersのBeanを定義する@TestConfigurationを作成できるようになった。次の例を見てください。

import org.springframework.boot.test.context.TestConfiguration;import org.springframework.boot.testcontainers.service.connection.ServiceConnection;import org.springframework.context.annotation.Bean;@TestConfiguration(proxyBeanMethods = false)public class MyContainersConfiguration {   @Bean   @ServiceConnection   Neo4jContainer<?> neo4jContainer (){       return new Neo4jContainer<>("neo4j:5");   }}

Spring Boot 3.1はコンテナのライフサイクルを管理し、アプリケーション起動時にコンテナを起動し、アプリケーション停止時にコンテナをシャットダウンする。この機能は、GradleやMaven用のSpring Bootプラグインを使ってIDEやターミナルから使用できる。

YouTubeの動画では、開発用コンテナの構築にDocker ComposeとTestcontainersを使用する方法について、さらに詳しく説明してる。動画内でJosh Long氏は、Testcontainersのメインメソッドを作成するプロセスと、Testcontainersを使用したMongoDBの設定を説明してる。これらの機能の特徴として、開発環境の一貫性の強化やセットアップの簡素化、テスト用インフラのライフサイクルの詳細な制御などが挙げられる。

Spring Boot 3.1の拡張機能は、開発環境のセットアップと依存関係の管理プロセスをシンプルにし、新しいエンジニアがプロジェクトに貢献し始めやすくすることを目的としている。Spring Boot 3.1でTestcontainersと開発時コンテナのサポートが改善されたことは、開発プロセスをより効率的かつ合理的にするための大きな前進だ。

Spring BootでTestcontainersの使用方法の詳細については、公式のSpring Bootの公式ドキュメントを参照してください。

作者について

この記事に星をつける

おすすめ度
スタイル

BT