Mockito "when" 方法与 spring boot 2 中 RestTemplateBuilder requestFactory 上的 lambda 参数不匹配
Mockito "when" method does not match lambda argument on RestTemplateBuilder requestFactory in spring boot 2
我在尝试模拟 restTemplateBuilder 时遇到问题:
private RestTemplate restTemplate() {
HttpClient client = HttpClients.custom().build();
return restTemplateBuilder.
requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client)).
build();
}
我的测试方法设置如下:
@Before
public void setUp() {
when(restTemplateBuilder.requestFactory(() -> any(ClientHttpRequestFactory.class))).thenReturn(restTemplateBuilder);
when(restTemplateBuilder.build()).thenReturn(restTemplate);
}
在这种情况下,requestFactory 总是 returns null。
Mockito 还提示我设置中的第一行未被使用,并在 requestFactory 行中询问“args ok?”。
您的 when 子句中的 lambda 函数需要一个匹配器。您可以使用 Mockito 中的 argThat,例如:
when(restTemplateBuilder.requestFactory(argThat(()-> new HttpComponentsClientHttpRequestFactory(clientMock))).thenReturn(restTemplateBuilder);
模拟客户。
另一种方法是使用 ArgumentCaptor:
@Captor
private ArgumentCaptor<Supplier> lambdaCaptor;
并使用它:
when(restTemplateBuilder.requestFactory(lambdaCaptor.capture()).thenReturn(restTemplateBuilder);
如果您需要有关匹配 lambda 的更多信息,请查看 the documentation。
我在尝试模拟 restTemplateBuilder 时遇到问题:
private RestTemplate restTemplate() {
HttpClient client = HttpClients.custom().build();
return restTemplateBuilder.
requestFactory(() -> new HttpComponentsClientHttpRequestFactory(client)).
build();
}
我的测试方法设置如下:
@Before
public void setUp() {
when(restTemplateBuilder.requestFactory(() -> any(ClientHttpRequestFactory.class))).thenReturn(restTemplateBuilder);
when(restTemplateBuilder.build()).thenReturn(restTemplate);
}
在这种情况下,requestFactory 总是 returns null。 Mockito 还提示我设置中的第一行未被使用,并在 requestFactory 行中询问“args ok?”。
您的 when 子句中的 lambda 函数需要一个匹配器。您可以使用 Mockito 中的 argThat,例如:
when(restTemplateBuilder.requestFactory(argThat(()-> new HttpComponentsClientHttpRequestFactory(clientMock))).thenReturn(restTemplateBuilder);
模拟客户。
另一种方法是使用 ArgumentCaptor:
@Captor
private ArgumentCaptor<Supplier> lambdaCaptor;
并使用它:
when(restTemplateBuilder.requestFactory(lambdaCaptor.capture()).thenReturn(restTemplateBuilder);
如果您需要有关匹配 lambda 的更多信息,请查看 the documentation。