私はSpringBootアプリケーションを持っています
@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}
ただし、PersistenceConfigはPersonRepositoryTestで取得されません
@RunWith( SpringRunner.class )
@DataJpaTest
public class PersonRepositoryTest {
// Tests ...
}
ただし、@DataJpaTest to @SpringBootTest
から変更すると、PersonRepositoryTestが構成を取得します。
私のパッケージ構造は
- main
- Java
- config
PersistenceConfig.Java
- domain
Person.Java
- persistence
PersonRepository.Java
Application.Java // @SpringBootApplication
- test
- Java
- persistence
PersonRepositoryTest.Java
Spring Boot 1.4でのテストの改善 は、@ DataJpaTestを使用して永続化レイヤーをテストすることを示唆しています
Observation:Testクラスで両方の注釈を実行しても、構成@SpringBootTest @DataJpaTestがインポートされない
質問1:@DataJpaTestで永続化レイヤーをテストするとき、どうすればいいですか適切に(Spring Bootのベストプラクティスの方法)構成パッケージをテストにインポートしますか?
質問2:@SpringBootTestを使用して回避することは受け入れられますか? @DataJpaTestは、トランザクション管理を含むデータベースの賢明な自動構成を備えたメタアノテーションでもあることを認識しています。しかし、私はそれを必要としない場合はどうなりますか?
解決策は、@Import
を使用して、@DataJpaTest
によって行われた構成に構成をインポートすることです。これは@Import
の私の理解です。
@RunWith(SpringRunner.class)
@DataJpaTest
@Import(AuditConfiguration.class)
public class AuditTest {
}
監査を有効にするAuditConfiguration
@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}
これを試すことができます:PersistenceConfig
に@ComponentScan
の注釈を付けて、Springでコンポーネントのスキャンを有効にします。
@Configuration
@EnableJpaAuditing
@ComponentScan(basePackages = "com.yourbasepackage")
public class PersistenceConfig {
}
それ以上の設定がない場合、@ComponentScan
はデフォルトでPersistenceConfig
クラスと同じパッケージをスキャンします。
@Context-Configuration
アノテーションを追加して、PersistenceConfig.classから構成をロードするように指示します。
@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=PersistenceConfig.class)
public class PersonRepositoryTest {
// Tests ...
}
@georges vanの投稿後、テストに1行追加するだけでALL構成クラスも取得されることがわかりました。
_@RunWith( SpringRunner.class )
@DataJpaTest
@ComponentScan(basePackages = "com.basepackage.config")
public class PersonRepositoryTest {
// Tests ...
}
_
誰かが1つの特定の構成クラスだけを望んでいる場合、次のことができます:
_@RunWith( SpringRunner.class )
@DataJpaTest
@ContextConfiguration(classes=MyConfig.class)
public class PersonRepositoryTest {
// Tests ...
}
_
または複数のクラス:
@ContextConfiguration(classes={MyConfig1.class, MyConfig2.class})