java - 如何告诉 Spring Boot 使用另一个数据库进行测试?

标签 java mysql testing spring-boot integration-testing

我希望 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);
    }
}

最佳答案

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

我将 application-test.properties 添加到/src/test/java/resources 中,并将数据源配置到数据库中进行测试。此外,我将 @ActiveProfiles("test") 添加到应该使用该数据库的测试中。请注意,Spring 在 application-test.properties 和注释中使用单词 test 来配置自己。因此,Spring“覆盖”了 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

应用程序测试.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

关于java - 如何告诉 Spring Boot 使用另一个数据库进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45653753/

相关文章:

Java通用接口(interface)性能

MySQL 报告 - 订单历史记录

testing - 我应该在哪些方面更加重视基于桌面的应用程序的安全测试?

java - Android重启线程

java - 从 HTML 转换为 DocX 时如何处理特殊字符

java - 重用类实例而不重新创建它们

mysql - 为什么同一个查询可能需要 1000 倍的时间,具体取决于 where 子句?

mysql - 如何向 Schema 类的 DBIx 搜索方法提供附加参数

ruby-on-rails - RSpec 测试中的 Rails Engine 宿主应用程序类

c# - Visual Studio 负载测试结果存储库空间不足