web-dev-qa-db-ja.com

SpringBootTestの@DataJpaTestに構成クラスをインポートするにはどうすればよいですか?

私はSpringBootアプリケーションを持っています

@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}

ただし、PersistenceConfigPersonRepositoryTestで取得されません

@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は、トランザクション管理を含むデータベースの賢明な自動構成を備えたメタアノテーションでもあることを認識しています。しかし、私はそれを必要としない場合はどうなりますか?

14
Dachstein

解決策は、@Importを使用して、@DataJpaTestによって行われた構成に構成をインポートすることです。これは@Importの私の理解です。

@RunWith(SpringRunner.class)
@DataJpaTest
@Import(AuditConfiguration.class)
public class AuditTest {
}

監査を有効にするAuditConfiguration

@Configuration
@EnableJpaAuditing
public class AuditConfiguration {
}
13
Sydney

これを試すことができます: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 ...
}
5
georges van

@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})

0
Dachstein