为啥@MockBean ConversionService 会导致错误

Posted

技术标签:

【中文标题】为啥@MockBean ConversionService 会导致错误【英文标题】:Why @MockBean ConversionService causes an error为什么@MockBean ConversionService 会导致错误 【发布时间】:2020-07-16 13:30:24 【问题描述】:

假设:使用 Intellij IDEA Ultimate 创建的 JUnit 5 和空 SpringBoot 项目。对于包含 @Autowired ConversionService 的控制器的项目,我得到了相同的结果。

我需要在测试中使用 ConversionService 的模拟版本。

这是我的方法:

import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.convert.ConversionService;

@SpringBootTest
public class ConversionServiceTest 

    @MockBean
    ConversionService conversionService;

    @Test
    void test() 

以上代码导致错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.format.support.FormattingConversionService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: @org.springframework.beans.factory.annotation.Qualifier(value="mvcConversionService")

这个错误的原因是什么,解决方法是什么?

【问题讨论】:

【参考方案1】:

解决方案是将@MockBean 替换为@SpyBean。

【讨论】:

以上是关于为啥@MockBean ConversionService 会导致错误的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 测试中的 MockBean 注解导致 NoUniqueBeanDefinitionException

SpringBoot @WebMvcTest 和 @MockBean 没有按预期工作

使用Spring Boot的@MockBean时创建严格的模拟?

[@ MockBean和@Autowired在一个测试类中使用同一服务

SpringBoot @MockBean 和 @WebMvcTest 不起作用

在应用程序启动之前配置@MockBean 组件