【问题标题】:annotation @MockBean not working(not injected?) on spring boot 2.3在 Spring Boot 2.3 上注释 @MockBean 不起作用(未注入?)
【发布时间】:2020-05-26 07:40:20
【问题描述】:

由于某些原因,我正在将 Spring Boot 版本从 2.1.6.RELEASE 升级到 2.3.0.RELEASE。

不幸的是,在此过程中我遇到了一些问题......其中一个就在这里。这是关于模拟功能,特别是假装客户端。

最奇怪的是,当我使用 spring boot 2.1.6 时,一切正常,并且 mocking 运行良好。 但是升级了版本后报错:

java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client

这意味着模拟过程不起作用,因为 feign 客户端实际上试图找到一个服务器。 是否有任何更改要应用我省略了?

为了确定,因为我发现 spring-boot-starter-test 模块将依赖 mockito 版本从 2.24.2(不确定)升级到 3.3.2(也不确定),所以我尝试将 mockito 版本降级为起源,它显示没有任何改变。所以我认为问题出在春天。

有什么办法可以解决这个问题吗?谢谢。

我有这些代码:

Test.java

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = Application.class)
@AutoConfigureMockMvc
public class Test{
    @MockBean private FeignProxy feignProxy;
    @Autowired private ApplicationService applicationService;

    @Test
    @Transactional
    public void doTest(){
        when(feignProxy.doProxy()).thenReturn(response);
        assertDoesNotThrow(() -> {
            applicationService.doService(); // exception occurs
        }
    }

ApplicationServiceImpl.java

@Component
public class ApplicationServiceImpl implements ApplicationService{
    @Autowired private FeignProxy feignProxy;
    public void doService(){
        ...
        feignProxy.doProxy();
        ...
    }
}

Application.java 有以下注解:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
...

简而言之:相同的代码,相同的流程,不同的版本,错误。

【问题讨论】:

    标签: java spring spring-boot mockito migration


    【解决方案1】:

    我找到了答案。 spring boot 和 spring cloud 的版本兼容性不匹配。当我使用 2.2.5.RELEASE 进行 spring boot 时,错误消失了。

    【讨论】:

    • 这个具体问题从2.2.7.RELEASE开始,2.2.6.RELEASE也可以。
    • @vinodchambole 你试过升级 Spring Cloud 吗?这对我有用。
    • 谢谢。我会试试的
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 2019-09-18
    • 2019-12-18
    • 2015-09-01
    • 1970-01-01
    • 2017-05-22
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多