如何实现cpp跨文件操作_DataBaseRider实现跨多个数据库的操作

本文详述如何在SpringBoot项目中利用Junit5和DataBaseRider进行跨多个数据库的测试。通过创建额外的`application-test.properties`配置文件,定义新的数据源,然后创建`DataSourceConfig` Bean,最后使用`@DBRider`注解指定数据源,实现对不同数据库的控制和操作。这种方法在微服务测试中尤其有用,确保测试环境的可控性。
摘要由CSDN通过智能技术生成

本文介绍如何在SpringBoot项目中,使用Junit5 + DataBaseRider实现跨多个数据库的操作。

应用场景

在涉及微服务的测试中,当测试某个微服务时,通常都会发生服务间调用。也就是测试微服务A时,A可能会向微服务B请求某些数据来完成某些业务处理。如下图所示,

3fdbba3ca233158154d22c596b34d189.png

而很有可能,这些数据是源自B服务的数据库。

在测试时,为了保证自动化用例可以反复被执行,就需要控制被测系统的上下文。也就是说,为了能够让针对A服务的测试能够通过,我们需要保证B系统的正常运转,尤其是要对B系统的数据库进行控制,如确保B数据库的某个表中的数据是某些固定的记录,也就是在用例执行之前测试框架通过setup步骤临时导入到该表中。如何用DataBaseRider实现上述操作呢?

测试用application-test.properties

一般来讲,在SpringBoot项目的配置文件,如application.properties中已经默认有一个数据库的配置了,一般是spring.datasource下的配置项。
为了能够控制第二个数据库,需要在默认数据库的基础上,额外增加一个需要连接的B服务的数据库的配置。因为这些配置只在集成测试或者系统测试中需要,可以考虑额外采用一个application-test.properties文件来存放这些信息,而不是污染项目组原有的配置文件。
一个可能的样例如下:

spring.datasource.url=jdbc:mysql://45.93.1.5:3306/fire?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.bbb.driver-class-name=oracle.jdbc.OracleDriver`
spring.datasource.bbb.url=jdbc:oracle:thin:@localhost:1521:bbb
spring.datasource.bbb.username=bbb
spring.datasource.bbb.password=bbb

额外写一个DataSourceConfig 的Bean

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
@Bean(name = "bbb")
@ConfigurationProperties(prefix = "spring.datasource.bbb")
public DataSource dataSourceSentence() {
return DataSourceBuilder.create().build();
}
}

**案例代码源自网络

@DBRider指定数据源

将DBRider自带的案例稍微修改下

package com.github.database.rider.springboot;
@DBRider //default datasource is used
@SpringBootTest
public class MultipleDataSourcesTest {
@Autowired
UserService userService;

@Test
@DataSet("users.yml")
public void shouldListUsers() {
//http call here
assertThat(userService.findByEmail("dbrider@mail.com")).isEqualTo(new User(3));
}

@Test
@DBRider(dataSourceBeanName = "companyDataSource")
@DataSet(value = "companies.yml",cleanBefore = true)
@ExpectedDataSet("expectedCompany.yml")
public void shouldDeleteCompany() {
userService.deleteComany(1L);
}
}

通过@DBRider(dataSourceBeanName = "companyDataSource") 来指定所使用的dataSource,并通过它来实现对数据库的操作。

由于@DBRider注解既可以在类上,也可以用在方法上,使用中注意使用范围。如果未申明所使用的dataSource的话,将默认使用带有@Primary注解的dataSourceBean。

这样就可以实现对多个数据库的操作了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值