gpt4 book ai didi

java - Mockito 不适用于 RestTemplate

转载 作者:行者123 更新时间:2023-12-01 16:49:07 25 4
gpt4 key购买 nike

我正在使用mockito来模拟RestTemplate交换调用。以下是我使用过的,但它没有选择模拟的 RestTemplate。

模拟通话。

ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class, userId);

模拟的 RestTempate 如下。

Mockito.when(restTemplate.exchange(
Matchers.anyString(),
Matchers.any(HttpMethod.class),
Matchers.<HttpEntity<?>> any(),
Matchers.<Class<String>> any(),
Matchers.anyString())).
thenReturn(responseEntity);

知道这里出了什么问题吗?这与 @RunWith(PowerMockRunner.class) 一起运行,因为我正在模拟静态内容。

最佳答案

signatureObject... 作为最后一个参数,因此您必须使用 anyVarArg()。这在这里工作正常:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import static org.assertj.core.api.Assertions.assertThat;

@RunWith(MockitoJUnitRunner.class)
public class Foo {
@Mock
private RestTemplate restTemplate;

@Test
public void testXXX() throws Exception {
Mockito.when(this.restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class), Matchers.any(), Matchers.<Class<String>>any(), Matchers.<Object>anyVararg()))
.thenReturn(ResponseEntity.ok("foo"));

final Bar bar = new Bar(this.restTemplate);
assertThat(bar.foobar()).isEqualTo("foo");
}

class Bar {
private final RestTemplate restTemplate;

Bar(final RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}

public String foobar() {
final ResponseEntity<String> exchange = this.restTemplate.exchange("ffi", HttpMethod.GET, HttpEntity.EMPTY, String.class, 1, 2, 3);
return exchange.getBody();
}
}
}

注意:使用anyVarArg,强制转换(Object) Matches.anyVarArgs()也可以避免不明确的方法错误。

关于java - Mockito 不适用于 RestTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44104937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com