データ]**

テスト中


1概要

JPAなどの永続化層に依存するSpringアプリケーションをテストするときは、テストデータソースをセットアップして、アプリケーションを実行するのとは異なる、より小型で高速のデータベースを使用しますテストをより簡単に実行できるようにするため。

Springでデータソースを設定するには、手動で、またはSpring Bootを使用している場合は標準のアプリケーションプロパティを通じて、

DataSource

型のBeanを定義する必要があります。

この簡単なチュートリアルでは、Springでテスト用に別のデータソースを設定するためのいくつかの方法を見ていきます。


2 Mavenの依存関係

Spring JPAとテストを使用してSpring Bootアプリケーションを作成するので、以下の依存関係が必要になります。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.194</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>


spring-boot-starter-data-jpa

の最新バージョン、

h2

およびhttps://search.maven。 org/classic/#検索%7Cga%7C1%7Ca%3A%22スプリングブートスターターテスト%22%20AND%20g%3A%22org.springframework.boot%22[スプリングブートスターターテスト]をダウンロードできますMaven Centralから。

テスト用に

DataSource

を設定するいくつかの異なる方法を見てみましょう。


3 Spring Bootで標準プロパティファイルを使用する

アプリケーションの実行時にSpring Bootが自動的に選択する標準プロパティファイルは

application.properties

と呼ばれ、

src/main/resources

フォルダにあります。

テストに異なるプロパティを使用したい場合は、

src/test/resources

に同じ名前の別のファイルを配置することで

main

フォルダ内のプロパティファイルを上書きできます。


src/test/resources

フォルダー内の

application.properties

ファイルには、データソースの設定に必要な標準のキーと値のペアが含まれています。これらのプロパティには

spring.datasource

というプレフィックスが付いています。

たとえば、

H2

インメモリデータベースをテスト用のデータソースとして設定しましょう。

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB__CLOSE__DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa

Spring Bootはこれらのプロパティを使用して

DataSource

Beanを自動的に設定します。

Spring JPAを使用して、非常に単純な

GenericEntity

とリポジトリを定義しましょう。

@Entity
public class GenericEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String value;

   //standard constructors, getters, setters
}

public interface GenericEntityRepository
  extends JpaRepository<GenericEntity, Long> { }

次に、リポジトリ用の

JUnit

テストを書きましょう。 Spring Bootアプリケーションのテストで定義した標準のデータソースプロパティを取得するには、

@ SpringBootTest

というアノテーションを付ける必要があります。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringBootJPAIntegrationTest {

    @Autowired
    private GenericEntityRepository genericEntityRepository;

    @Test
    public void givenGenericEntityRepository__whenSaveAndRetreiveEntity__thenOK() {
        GenericEntity genericEntity = genericEntityRepository
          .save(new GenericEntity("test"));
        GenericEntity foundEntity = genericEntityRepository
          .findOne(genericEntity.getId());

        assertNotNull(foundEntity);
        assertEquals(genericEntity.getValue(), foundEntity.getValue());
    }
}


4カスタムプロパティファイルの使用

標準の

application.properties

ファイルとキーを使用したくない場合、またはSpring Bootを使用していない場合は、カスタムキーを使用してカスタム

.properties

ファイルを定義し、このファイルを

@ Configuration

クラスで読み取ることができます。含まれる値に基づいて

DataSource

Beanを作成します。

このファイルは、アプリケーションの通常の実行モードでは

src/main/resources

フォルダに配置され、テストで検出されるように

src/test/resources

に配置されます。

テストに

H2

メモリ内データベースを使用する

persistence-generic-entity.properties

というファイルを作成し、

src/test/resources

フォルダに配置します。

jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:mem:db;DB__CLOSE__DELAY=-1
jdbc.username=sa
jdbc.password=sa

次に、

persistence-generic-entity.properties

をプロパティソースとしてロードする

@ Configuration

クラスで、これらのプロパティに基づいて

DataSource

Beanを定義できます。

@Configuration
@EnableJpaRepositories(basePackages = "org.baeldung.repository")
@PropertySource("persistence-generic-entity.properties")
@EnableTransactionManagement
public class H2JpaConfig {
   //...
}

この設定のより詳細な例については、リンク上の以前の記事を見てください。/spring-jpa-test-in-memory-database 。

それから、前のものと同様の

JUnit

テストを作成することができます。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class, H2JpaConfig.class})
public class SpringBootH2IntegrationTest {
   //...
}


5スプリングプロファイルの使用

テスト用に別の

DataSource

を設定することができるもう1つの方法は、

test

profileでのみ使用可能な

DataSource

beanを定義するためにSpring Profilesを利用することです。

これには、以前と同じように

.properties

ファイルを使用するか、クラス自体に値を書き込むことができます。

テストによってロードされる

@ Configuration

クラスの

test

プロファイルに

DataSource

Beanを定義しましょう。

@Configuration
@EnableJpaRepositories(basePackages = {
  "org.baeldung.repository",
  "org.baeldung.boot.repository"
})
@EnableTransactionManagement
public class H2TestProfileJPAConfig {

    @Bean
    @Profile("test")
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:db;DB__CLOSE__DELAY=-1");
        dataSource.setUsername("sa");
        dataSource.setPassword("sa");

        return dataSource;
    }

   //configure entityManagerFactory
   //configure transactionManager
   //configure additional Hibernate properties
}

次に、

JUnit

テストクラスで、

@ ActiveProfiles

アノテーションを追加して

test

プロファイルを使用することを指定する必要があります。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {
  Application.class,
  H2TestProfileJPAConfig.class})
@ActiveProfiles("test")
public class SpringBootProfileIntegrationTest {
   //...
}


6. 結論

このクイックチュートリアルでは、Springでテストするために別の

DataSource

を設定できるいくつかの方法を説明しました。

いつものように、例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-persistence[over GitHub]にあります。