spring-boot - 在 Spring Boot 中进行测试时跳过与 mysql 的数据库连接
问题描述
我在我的 Spring Boot 项目中使用以下依赖项(在 gradle 中)以使其与 mysql 一起使用
compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootCloudVersion}")
并在我的 application.properties 文件中提供了 Datasource 设置:-
spring.datasource.url=jdbc:mysql://127.0.0.1/test?zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
它运行良好。
在 Spring Boot 中执行测试用例时,我想跳过使用 mysql 创建数据库连接,因为我没有从数据库中得到任何东西,而是我已经模拟了(使用 mockito),这是正确的方法。
我在 google 和 stackoverflow 上进行了搜索,但找不到关于“如何在执行测试用例时跳过创建数据库连接”的解决方案。
有人可以帮我解决这个问题或指导吗
我的测试文件:-
package com.myproject.utility.services.impl;
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class UserServicesImplTest {
private static final String MOBILE = "123456";
@MockBean
private UserRepository userRepository;
@Autowired
private UserService userService;
@Test
public void verify(){
when(userRepository.findAll().thenReturn(Optional.empty());
userService.verifyDetails(MOBILE);
}
}
解决方案
您应该提供一个“测试配置”,您可以将其放置在您的测试类中,然后 Spring 将使用它而不是生产配置:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServicesImplTest {
private static final String MOBILE = "123456";
@MockBean private UserRepository userRepository;
@Autowired private UserService userService;
@Test
public void verify(){
when(userRepository.findAll().thenReturn(Optional.empty());
userService.verifyDetails(MOBILE);
}
@Configuration
@Import(UserService.class)
static class TestConfig {
@Bean
UserRepository userRepository() {
return mock(UserRepository.class);
}
}
}
更多信息在这里:检测测试配置
推荐阅读
- amazon-web-services - 确定 SNS 消息的发布者?
- stm32 - 带 HAL 库的 STM32l1xx I2C
- c - 这段代码有问题吗?有时我得到正确答案,有时我得到一个很大的数字
- python - Sickle 是否以随机顺序访问 OAI 记录?
- sql - 根据列值选择上一个行号
- sql - 在表中查找相同的连接记录
- express - 通过graphql发送connect.sid并手动设置
- neo4j - Neo4J - 具有多个标签的节点是一种好习惯吗?
- css - 我在 Bootstrap4 上做错了什么?
- twilio - twilio-python 6.5.0:“客户端”实例没有“工作室”成员