web-dev-qa-db-ja.com

@DataJpaTestを使用してカスタムスキームを設定する

Spring Bootを使用してリポジトリをテストし、TestEntityManagerを含めて、リポジトリが実際に実行する必要があることを確認したいと思います。

これがJUnitテストです。

@RunWith(SpringRunner.class)
@DataJpaTest
public class MyRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private MyRepository repository;

    ...

他のJUnitテストでは、いくつかのテーブル、インデックス、シーケンス、および制約を使用してスキーマを設定するapplication-junit.propertiesファイルがあります。

spring.datasource.url=jdbc:h2:mem:testdb;Mode=Oracle;INIT=create schema if not exists testdb\\;SET SCHEMA testdb\\;runscript from 'classpath:create.h2.sql';
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.hibernate.ddl-auto=none
spring.datasource.continue-on-error=true

#datasource config
spring.database.driver-class-name=org.h2.Driver
spring.database.jndi-name=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true

現在、DataJpaTestでは、この構成は使用されていないようです。 @ActiveProfiles( "junit")を追加しても。

JUnitテストでcreate.h2.sqlファイルを使用してテーブルを設定するにはどうすればよいですか?

よろしくお願いします、ニーナ

9
Nina

@DataJpaTest構成されたデータソースをメモリ内データソースに置き換える を置き換えるためではありません。

junit特別なプロファイルの場合のように、それが望ましくない場合は、構成済みのDataSourceをオーバーライドしないようにSpringBootに指示する必要があります。上記のリンクのドキュメントに例があります。基本的に、テストは次のようになります。

@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("junit")
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class MyRepositoryTest {
   ...
}

これを何度も繰り返す必要がないように、最後の2つ(3つ?)の注釈を共有するメタ注釈を作成することを検討する必要があります。

16
Stephane Nicoll