升级reactor-netty-http至1.0.24遇VerifyError,求测试代码修改方案
reactor-netty-http 升级到1.0.24后 VerifyError 问题解决
问题描述
将reactor-netty-http版本从1.0.19升级到1.0.24时,出现以下错误:
java.lang.VerifyError: reactor.netty.http.client.HttpClientConfig overrides final method connectionProvider
对应的测试代码如下:
@Mock private WebClient webClient; @Before public void setup() { webClient = WebClient.builder().baseUrl("baseurl").build(); // 报错行 }
问题原因
reactor-netty-http 1.0.24版本中,HttpClientConfig.connectionProvider()方法被修改为final方法。你同时使用@Mock注解和WebClient.builder()创建真实实例,导致Mock框架(如Mockito)生成动态代理时,尝试覆盖这个final方法,触发了VerifyError。
解决方案
方案1:移除Mock注解,使用真实WebClient实例
如果测试需要实际执行WebClient的调用逻辑,直接去掉@Mock注解,保留实例创建逻辑即可:
private WebClient webClient; @Before public void setup() { webClient = WebClient.builder() .baseUrl("baseurl") .build(); }
方案2:完全Mock WebClient(适合仅验证调用行为的测试)
如果测试只需要验证WebClient的调用行为,无需实际执行请求,应Mock WebClient的方法链,而非创建真实实例:
@Mock private WebClient webClient; @Mock private WebClient.RequestBodyUriSpec requestBodyUriSpec; @Mock private WebClient.RequestHeadersSpec<?> requestHeadersSpec; @Mock private WebClient.ResponseSpec responseSpec; @Before public void setup() { MockitoAnnotations.openMocks(this); // 根据测试需求Stub WebClient的调用链 when(webClient.get()).thenReturn(requestBodyUriSpec); when(requestBodyUriSpec.uri(anyString())).thenReturn(requestHeadersSpec); when(requestHeadersSpec.retrieve()).thenReturn(responseSpec); }
内容的提问来源于stack exchange,提问作者vaishali jain
相关产品推荐
相关产品推荐

