gpt4 book ai didi

java - 有没有办法模拟本地对象上的方法调用

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

我正在使用 Mockito 框架为现有的 spring-boot 项目编写测试用例。

在其中一个类中,他们在函数内创建了 rest-template 的本地实例,而不是 @Autowiring

public LatxDetails getLatxCaseDetail_Fallback(String endpoint, Map<String, String> requestMap) {

//some code

RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(kxCreateEndpoint, HttpMethod.POST, httpEntity, String.class);

//some code

我无法模拟其余调用。我无法添加任何其他外部 jar 或更改代码。我应该如何进行?非常感谢任何帮助。

最佳答案

显而易见的解决方案是注入(inject) RestTemplate 而不是在本地实例化,但正如您所说,您无法更改现有代码,我建议使用 PowerMock with Mockito使用 PowerMockito.whenNew 替换 RestTemplate 的构造函数调用方法。

例如

RestTemplate restTemplateMock = Mockito.mock(RestTemplate.class);
PowerMockito.whenNew(RestTemplate.class).withAnyArguments().thenReturn(restTemplateMock);

然后在restTemplateMock对象上进行when设置。

正如 Strelok 在评论中提到的:为了使用 PowerMockito,您需要通过使用 @RunWith(PowerMockRunner.class) 注释测试类来使用 PowerMockRunner 运行测试。@PrepareForTest

例如

@RunWith(PowerMockRunner.class)
@PrepareForTest(RestTemplate.class)
public class Test {

关于java - 有没有办法模拟本地对象上的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427118/

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