【发布时间】:2021-04-14 11:52:54
【问题描述】:
我试图在我的一项测试中模拟WebClient。我在网上找到了一些人们这样做的例子。
spring-data-elasticsearch 的一个例子和tutorials 的另一个例子。
这是我自己的例子。
@Test
public void mytest() {
WebClient webClient = mock(WebClient.class);
RequestHeadersUriSpec headersUriSpec = mock(RequestHeadersUriSpec.class);
when(webClient.get()).thenReturn(headersUriSpec);
}
不幸的是,我看到了一些警告。这是我得到的:
WebClient.RequestHeadersUriSpec 是原始类型。对泛型 WebClient.RequestHeadersUriSpec 的引用应该被参数化
当我更改代码并向RequestHeadersUriSpec 添加通配符时,我收到另一条错误消息。
@Test
public void mytest() {
WebClient webClient = mock(WebClient.class);
RequestHeadersUriSpec<?> headersUriSpec = mock(RequestHeadersUriSpec.class);
when(webClient.get()).thenReturn(headersUriSpec);
}
OngoingStubbing
> 类型中的 thenReturn(WebClient.RequestHeadersUriSpec ) 方法不适用于参数 (WebClient.RequestHeadersUriSpec )
如果我让 Java 推断类型,我会收到第三条消息。
@Test
public void mytest() {
WebClient webClient = mock(WebClient.class);
var headersUriSpec = mock(RequestHeadersUriSpec.class);
when(webClient.get()).thenReturn(headersUriSpec);
}
类型安全:WebClient.RequestHeadersUriSpec 类型的表达式需要未经检查的转换才能符合 WebClient.RequestHeadersUriSpec
现在我想知道
- 为什么它适用于其他项目?
- 如何解决我的问题?
非常感谢!
最好的问候, 米尔科
【问题讨论】:
-
你能更新你用于 Spring webclient 和 Mockito 的版本吗?
-
我们已经在使用最新版本了。
-
WebClient.RequestHeadersUriSpec is a raw type警告也出现在spring-data-elasticsearch存储库中,考虑到它是一个警告,不会因为警告而失败。虽然由于 Mockito 的原因,通配符的这些错误是有效的,但您可以找到类似的答案:stackoverflow.com/questions/7366237/… 和 stackoverflow.com/questions/15942880/…
标签: java spring-boot spring-webclient