web-dev-qa-db-ja.com

メモリ内のdbを使用したSpring Bootテスト

Spring Bootを使用してSpring Webプロジェクトを作成しました。テストに関する実践を理解したいと思います。私はメモリに埋め込まれたデータベースが必要で、最初のschema.sqlを使用するjunitsにはhsqlまたはh2と言います。メインアプリケーションでは、データベースはmysqlまたはOracleとすることができます

Spring Boot以外のプロジェクトでは、通常、webアプリケーションによって参照される個別のapplicationcontext.xmlがあり、テストにはapplicationContext-text.xmlを使用します。

今、Spring Bootではすべてが自動的に作成され、Spring Bootも使用されます。 Junits用の埋め込みインメモリdbと、アプリケーション用のMySQLなどの外部dbを設定するにはどうすればよいですか。

私が考えることができる1つの解決策は、プロフィールを使用することです。 2つのプロパティファイルapplication.propertiesおよびapplication-test.propertiesを使用します。そして、私のjunitsのテストプロファイルを使用します。

私が取るべきアプローチに関する推奨事項。

28
Nehal Damania

実際、プロファイルは推奨されるアプローチです。私が行うことは、おそらくインメモリ実装を「デフォルト」プロファイルにすることです(実際のデータを変更しないという意味では無害なので、誰かが実際のデータベースに対して誤って実行した場合に備えて、デフォルトにすることをお勧めします) )。個人的には、すべての外部設定を1つのapplication.ymlファイル、しかしそれはあなた次第です。外部構成では、有効なドライバークラスとURLを指定する必要があります。

spring:
  datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:test;MODE=PostgreSQL
    schema: classpath:/schema.sql

---

spring:
  profiles: local
  datasource:
    url: jdbc:postgresql://localhost/test
    username: root
    password: changeme
    driverClassName: org.postgresql.Driver
    schema:

(H2にはpostgres互換モードがあるため、本番環境でのpostgresを補完するものとして、これは本当に素晴らしいものです。)

40
Dave Syer