web-dev-qa-db-ja.com

テストに別のDBを使用するようにSpringBootに指示するにはどうすればよいですか?

Spring Bootで、統合テスト用にアプリケーションデータベースの隣にあるMySQLテストデータベースを使用したいと思います。現時点では、GradleにH2依存関係を追加したため、H2データベースが自動的に使用されています。

たとえば、このテストはH2データベースを使用して実行されますが、物理的なセカンダリデータベースを使用する方がよいでしょう。

import org.junit.Test;
import org.junit.runner.RunWith;
import org.observer.media.model.MediaGroup;
import org.observer.media.repository.MediaGroupRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import static org.assertj.core.api.Assertions.assertThat;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MediaGroupServiceTest {

    @Autowired
    private MediaGroupService mediaGroupService;
    @Autowired
    private MediaGroupRepository mediaGroupRepository;

    @PersistenceContext
    private EntityManager entityManager;

    private MediaGroup mediaGroup = new MediaGroup("name", "ceo", "owner");

    @Test
    public void save() {
        MediaGroup entity = mediaGroupService.saveNew(mediaGroup);

        assertThat(mediaGroupRepository.findByName(mediaGroup.getName())).isEqualTo(entity);
    }
}
7
progonkpa

/ src/main/Java/resourcesにapplication.propertiesがあり、メインアプリケーションのデータソース構成があります。

テスト用に、application-test.propertiesを/ src/test/Java/resourcesに追加し、データソース構成をデータベースに追加しました。さらに、そのデータベースを使用する必要があるテストに@ActiveProfiles("test")を追加しました。 Springは、application-test.propertiesとアノテーションでWordテストを使用して自身を構成することに注意してください。そのため、Springはapplication.propertiesの構成を「上書き」します。

application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/database
spring.datasource.username=user
spring.datasource.password=secret
spring.datasource.driverClassName=com.mysql.jdbc.Driver

application-test.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/database_test
spring.datasource.username=user
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
5
progonkpa

質問にはすでに答えがありますが。

JPAアプリケーションをテストする場合は、@DataJpaTestを使用することもできます。デフォルトでは、インメモリ組み込みデータベースを構成し、@ Entityクラスをスキャンして、Spring DataJPAリポジトリーを構成します。通常の@ComponentBeanはApplicationContextにロードされません。

これは、SpringBootアプリケーションで行われたテストの改善の1つです。

ドキュメントを読む: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

3
Barath