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ファイルを使用してテーブルを設定するにはどうすればよいですか?
よろしくお願いします、ニーナ
@DataJpaTest
が 構成されたデータソースをメモリ内データソースに置き換える を置き換えるためではありません。
junit
特別なプロファイルの場合のように、それが望ましくない場合は、構成済みのDataSource
をオーバーライドしないようにSpringBootに指示する必要があります。上記のリンクのドキュメントに例があります。基本的に、テストは次のようになります。
@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("junit")
@AutoConfigureTestDatabase(replace=Replace.NONE)
public class MyRepositoryTest {
...
}
これを何度も繰り返す必要がないように、最後の2つ(3つ?)の注釈を共有するメタ注釈を作成することを検討する必要があります。