[@ MockBean和@Autowired在一个测试类中使用同一服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[@ MockBean和@Autowired在一个测试类中使用同一服务相关的知识,希望对你有一定的参考价值。
是否可能以某种方式在同一服务的相同测试类@MockBean
和@Autowired
中使用?
换句话说,我只想为一个测试提供@MockBean
服务,而对于同一类别的其他测试,我需要将其作为@Autowired
。
答案
这取决于@MockBean
和@Autowired
之间的差异。
@Autowired
仅在SpringContext
中查找该类型的bean。这意味着如果需要“自动装配”它,则需要创建该bean
@MockBean
完全符合您的期望,它将创建服务的“模拟”,并将其作为bean注入。
所以这个
class MyTest
@MockBean
MyService myService;
等效于此
class MyTest
@Autowired
MyService myService;
@TestConfiguration
static class Config
@Bean
MyService myService()
return Mockito.mock(MyService.class);
因此,如果在其他测试中需要使用MyService
类型的其他bean,则需要在@TestConfiguration
带注释的类中创建bean
class MyTest
@Autowired
MyService myService;
@TestConfiguration
static class Config
@Bean
MyService myService()
return new MyServiceImpl();
或者,如果您已经有一个包含该服务的bean的配置类,则只需@Import
它
@Import(MyConfig.class)
class MyTest
@Autowired
MyService myService;
@Configuration
public class MyConfig
@Bean
MyService myService()
return new MyServiceImpl();
以上是关于[@ MockBean和@Autowired在一个测试类中使用同一服务的主要内容,如果未能解决你的问题,请参考以下文章
spring单元测试Mock,MockBean踩坑及没有真实执行的理解
SpringBoot @MockBean 和 @WebMvcTest 不起作用
Spring Boot 测试中的 MockBean 注解导致 NoUniqueBeanDefinitionException