gpt4 book ai didi

java - 如何在Java Spring boot中模拟RestTemplate?

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:18 25 4
gpt4 key购买 nike

我正在尝试使用下面的代码来模拟 RestTemplate getEntity() 方法,但我遇到了异常,而且我是单元测试的新手

谁能帮我看看我的错误是什么

public List<SampleObject1> getGitHubUSersList(){

try {
ResponseEntity<SampleObject1[]>responseEntity = restTemplate.getForEntity("https://api.github.com/users", SampleObject1[].class);
List<SampleObject1>arrayList = Arrays.asList(responseEntity.getBody());
System.out.println("final list is---->"+objectMapperl.writeValueAsString(arrayList));
return arrayList;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}

测试类

public class SampleServiceTest1 {

@Mock
RestTemplate mockrestTemplate;

@InjectMocks
@Spy
SampleService1 sampleService;

@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}

@SuppressWarnings("unchecked")
@Test
public void getGitHubUSersListTest() {

List<SampleObject1> sampleObject1s = new ArrayList<>();

SampleObject1 sampoleObject1 = new SampleObject1();
sampoleObject1.setId(1);
sampoleObject1.setLogin("sample1");
sampoleObject1.setNode_id("sample2");
sampleObject1s.add(sampoleObject1);

SampleObject1 sampoleObject2 = new SampleObject1();
sampoleObject2.setId(2);
sampoleObject2.setLogin("sample3");
sampoleObject2.setNode_id("sample4");
sampleObject1s.add(sampoleObject2);

Mockito.doReturn(sampleObject1s).when(mockrestTemplate).getForEntity(Matchers.anyString(), ArgumentMatchers.any(Class.class));

List<SampleObject1> list = sampleService.getGitHubUSersList();

assertNotNull(list);
}

}

错误

org.mockito.exceptions.misusing.NullInsteadOfMockException: 
Argument passed to when() is null!
Example of correct stubbing:
doThrow(new RuntimeException()).when(mock).someMethod();
Also, if you use @Mock annotation don't miss initMocks()
at com.example.microservice.service.SampleServiceTest1.getGitHubUSersListTest(SampleServiceTest1.java:50)

最佳答案

您的模拟设置错误 getForEntity不返回List<SampleObject1>所以你不能将其设置为返回,你需要返回 ResponseEntity<SampleObject1[]>

所以来解决你的问题。声明一个新的模拟

@Mock
private ResponseEntity<SampleObject1[]> mockResponseEntity

doReturn(mockResponseEntity).when(mockrestTemplate).getForEntity(anyString(),  any(Class.class));
doReturn(new SampleObject1[]{sampoleObject1, sampoleObject2}).when(mockResponseEntity).getBody();

关于java - 如何在Java Spring boot中模拟RestTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59731201/

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