SpringBoot がデータベース統合テストに EmbeddedDatabaseBuilder を使用する方法
SpringBoot アプリケーションを開発するとき、多くの場合、データベースと対話する必要があります。アプリケーションが実稼働環境で適切に動作することを確認するには、データベース統合テストを実行して、アプリケーションがデータベースと適切に対話できるかどうかをテストする必要があります。この記事では、SpringBootを使ったデータベース統合テストの方法を紹介しますEmbeddedDatabaseBuilder
。
EmbeddedDatabaseBuilderの概念と使い方
EmbeddedDatabaseBuilder
メモリ内に埋め込みデータベースを作成および管理するために Spring Framework によって提供されるクラスです。H2、HSQLDB、Derby、SQLite など、さまざまなデータベース タイプをサポートしています。を使用するとEmbeddedDatabaseBuilder
、単体テスト、統合テスト、機能テスト用の組み込みデータベースを簡単に作成および破棄できます。
EmbeddedDatabaseBuilder
組み込みデータベースを構成および管理するために、いくつかの方法が提供されています。一般的に使用されるいくつかの方法を次に示します。
setType
:組み込みデータベースの種類を設定します。setName
:組み込みデータベース名を設定します。addScript
: SQLスクリプトファイルを追加します。setScriptEncoding
: SQL スクリプト ファイルのエンコードを設定します。setDataSource
: カスタムDataSource
実装を設定します。
以下は、EmbeddedDatabaseBuilder
H2 データベースを作成して SQL スクリプト ファイルを追加する方法を示す簡単な例です。
EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.build();
上記の例では、EmbeddedDatabaseBuilder
を使用して H2 データベースを作成し、schema.sql
初期化スクリプトとしてファイルを追加しました。
結合テストの概念と目的
ソフトウェア開発において、統合テストは、アプリケーションのさまざまなコンポーネント間の統合と相互作用をテストするために使用されるテスト方法です。統合テストは、通信エラー、インターフェイスの非互換性、依存関係の問題など、コンポーネント間の統合の問題を発見して解決するのに役立ちます。
SpringBoot アプリケーションでは、統合テストの目的は、アプリケーションのさまざまな部分が適切に動作し、他の外部コンポーネント (データベース、メッセージ キュー、RESTful API など) と正しく対話できることを確認することです。統合テストは、これらの問題を発見して修正し、アプリケーションが本番環境で安定して実行できるようにするのに役立ちます。
EmbeddedDatabaseBuilder を使用したデータベース統合テスト
データベース統合テストは、を使用するとEmbeddedDatabaseBuilder
非常に簡単です。テスト クラスでオブジェクトを作成しEmbeddedDatabase
、それをリポジトリまたはサービスに注入するだけです。以下は、データベース統合テストを実行する方法を示す例です。
1. テストケースを書く
ユーザー情報をクエリするための単純なリポジトリがあるとします。このテスト ケースでは、このリポジトリがデータベースと正しく対話できるかどうかをテストします。
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testFindById() {
User user = new User(1L, "John", "[email protected]");
userRepository.save(user);
User result = userRepository.findById(1L);
assertThat(result).isNotNull();
assertThat(result.getName()).isEqualTo("John");
assertThat(result.getEmail()).isEqualTo("[email protected]");
}
}
上記のテスト ケースでは、@SpringBootTest
アノテーションを使用してこれが統合テストであることを宣言し、 auto-configuration を使用しましたDataSource
。このメソッドではtestFindById
、まずユーザー プロファイルをデータベースに追加します。次に、userRepository.findById(1L)
メソッドを使用してユーザー情報をクエリし、クエリ結果が期待値と同じであることをアサートします。
2. 組み込みデータベースの構成
テスト ケースを実行する前に、組み込みデータベースを構成する必要があります。組み込みデータベースを作成するためのクラスを作成し@Configuration
、Bean を宣言できます。DataSource
以下は、H2 データベースの構成方法を示す例です。
@Configuration
public class TestDatabaseConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:schema.sql")
.build();
}
}
上記の構成では、DataSource
Bean を作成し、EmbeddedDatabaseBuilder
H2 データベースの構築に使用しました。同時に、schema.sql
初期化スクリプトとしてファイルも追加しました。
3. テストケースを実行する
これで、テスト ケースを実行する準備が整いました。テスト ケースを実行すると、SpringBoot は最初に構成クラスをロードし、次に組み込みデータベースを作成して、それをリポジトリに挿入します。次に、テスト ケースはこのリポジトリを使用してテストを行い、テスト結果が期待どおりであることを確認します。
要約する
この記事では、データベース統合テストにおける SpringBoot の使用方法を紹介しましたEmbeddedDatabaseBuilder
。EmbeddedDatabaseBuilder
まず、結合テストの概念と使用法を紹介し、次に結合テストの概念と目的を説明します。EmbeddedDatabaseBuilder
最後に、テスト ケースの作成、組み込みデータベースの構成、テスト ケースの実行など、統合テストの使用方法を示しました。
データベース統合テストを使用するとEmbeddedDatabaseBuilder
、アプリケーションがデータベースと正しく対話できるかどうかを簡単にテストし、統合の問題を見つけて解決できます。これは、アプリケーションが本番環境で安定して動作することを保証するのに役立ちます。