gpt4 book ai didi

java - 如何模拟接受类类型的泛型方法?

转载 作者:行者123 更新时间:2023-12-02 10:24:26 24 4
gpt4 key购买 nike

我正在尝试为 REST API 客户端编写单元测试。我遵循的模式在其他各种单元测试中都非常适合我。特别是,我已经成功模拟了已注入(inject)测试存储库的依赖项。但是,当我模拟 Spring RestTemplate 时,我找不到方法让它的 getForObject() 方法返回除 null 之外的任何内容。 。有谁知道如何做到这一点?我怀疑问题可能是 RestTemplate.getForObject() 的签名包含泛型:

public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException

这是我正在尝试测试的 REST 客户端类:

@Repository
public class WebApplicationClient {
private final RestTemplate template;
public WebApplicationClient(RestTemplate template) {
this.template = template;
}
public <T> T getData(String baseUrl, Class<T> clazz) {
String endpoint = process(baseUrl);
try {
return template.getForObject(endpoint, clazz); // Mock this call during testing
} catch (HttpClientErrorException | HttpServerErrorException e) {
String msg = "API call failed: " + endpoint;
LOG.warn(msg, e);
throw new WebApplicationException(e.getStatusCode(), msg, e);
}
}
}

这是迄今为止我的单元测试。我尝试 when(template.getForObject(...)) 总是返回 null。因此 result 始终为 null 并且我的断言失败。

public class WebApplicationClientUnitTests {
@Mock private RestTemplate template;
private WebApplicationClient client;

@Before
public void setup() {
MockitoAnnotations.initMocks(this);
client = new WebApplicationClient(template);
}

@Test
public void getData_Test1() {
// when(template.getForObject(any(), eq(String.class))).thenReturn("sample"); // Returns null
when(template.getForObject(any(), any())).thenReturn("sample"); // Returns null

String result = client.getData(TEST_URL, "db", expectedState, String.class);
Assert.assertEquals("sample", result);
}
}

如何让 getForObject() 返回实际值?

最佳答案

@Test
public void getData_Test1() {

when(template.getForObject((String) any(),eq(String.class))).thenReturn("sample");
//OR
//when(template.getForObject((String) any(),(Class)any())).thenReturn("sample");
//OR
//when(template.getForObject(any(String.class), any(Class.class))).thenReturn("sample");

String result = client.getData("TEST_URL", String.class);
Assert.assertEquals("sample", result);
}

上面的代码对我来说效果很好。

关于java - 如何模拟接受类类型的泛型方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54084243/

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