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);
}
}
/ 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
質問にはすでに答えがありますが。
JPAアプリケーションをテストする場合は、@DataJpaTest
を使用することもできます。デフォルトでは、インメモリ組み込みデータベースを構成し、@ Entityクラスをスキャンして、Spring DataJPAリポジトリーを構成します。通常の@ComponentBeanはApplicationContextにロードされません。
これは、SpringBootアプリケーションで行われたテストの改善の1つです。
ドキュメントを読む: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html