在 spring 引导中进行测试时跳过与 mysql 的数据库连接
skip database connection with mysql while doing testing in spring boot
我在 spring 引导项目中使用以下依赖项(在 gradle 中)以使其与 mysql
一起工作
compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootCloudVersion}")
并在下面的 application.properties 文件中提供了数据源设置:-
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 引导中执行测试用例时,
我想跳过使用 mysql 创建数据库连接,因为我没有从数据库中得到任何东西,而是我模拟了(使用 mockito),这是正确的方法。
我已经在 google 和 Whosebug 上搜索过,但我找不到关于 "how can I skip creating database connection while executing test cases" 的解决方案。
谁能帮我解决这个问题或指导一下
我的测试文件:-
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);
}
}
您应该提供一个 'test configuration',您可以将其放入测试 class,然后 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);
}
}
}
更多信息在这里:Detecting Test Configuration
我在 spring 引导项目中使用以下依赖项(在 gradle 中)以使其与 mysql
一起工作 compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootCloudVersion}")
并在下面的 application.properties 文件中提供了数据源设置:-
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 引导中执行测试用例时, 我想跳过使用 mysql 创建数据库连接,因为我没有从数据库中得到任何东西,而是我模拟了(使用 mockito),这是正确的方法。
我已经在 google 和 Whosebug 上搜索过,但我找不到关于 "how can I skip creating database connection while executing test cases" 的解决方案。
谁能帮我解决这个问题或指导一下
我的测试文件:-
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);
}
}
您应该提供一个 'test configuration',您可以将其放入测试 class,然后 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);
}
}
}
更多信息在这里:Detecting Test Configuration