如何告诉Spring Boot使用另一个DB进行测试?

pro*_*kpa 6 java mysql testing integration-testing spring-boot

我希望Spring Boot使用存在于应用程序数据库旁边的MySQL测试数据库进行集成测试.目前,它正在自动使用H2数据库,因为我在Gradle中添加了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);
    }
}
Run Code Online (Sandbox Code Playgroud)

pro*_*kpa 5

我在/ src/main/java/resources中有application.properties,主应用程序的数据源配置.

我将带有数据源配置的application-test.properties添加到/ src/test/java/resources到数据库进行测试.另外,我添加@ActiveProfiles("test")了应该使用该数据库的测试.请注意,Spring使用application-test.properties和注释中的单词test进行自我配置.因此,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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 在testclass中使用@Commit,如果没有,我在db中看不到任何内容 (3认同)