spring-boot - 在 Spring Boot 中测试链式 REST API
问题描述
在我的RestController
. 这意味着我RestController
实际上做了这些步骤:
- 日期转换
- 使用数据调用外部 API
- 使用外部 API 响应进行响应
由于安全问题,无法复制/粘贴,但通常:
@RestController
public Class x{
RestTemplate y = new RestTemplate();
@RequestMapping(value="/someurl" , method=RequestMethod=POST)
public String myMethod(@RequestBody JsonNode myjson)
{
//business logic
ResponseEntity<String> response = restTemplate.exchange(url,HttpMethod,
internalRequest,String.class);
return response.getBody()
}
解决方案
在这里,您正在创建一个新的 RestTemplate 实例。您可以考虑在 Configuration 类中定义 RestTemplate 的 bean,并在此处自动装配它以使用 Mockito 框架对其进行模拟和测试。
然后控制器中的代码必须如下所示。
@RestController
public Class Controller{
@Autowired
RestTemplate restTemplate;
RestTemplate bean 应该在配置类中定义如下
@Configuration
public class Config {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
完成上述操作后,您可以模拟 RestTemplate 如下
@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {
@Mock
RestTemplate restTemplate;
@InjectMocks
Controller controller;
@Test
public void myMethodTest() {
Mockito.when(restTemplate.exchange(Mockito.eq(your url),
Mockito.eq(HttpMethod.your method), Mockito.<HttpEntity<your request
class>> any(), Mockito.<Class<your response class>>
any())).thenReturn(your response entity);
String response = controller.myMethod(your request);
Assert.assertThat(response, CoreMatchers.is((your response entity).getBody));
}
使用上述内容,您可以断言来自模拟的 restTemplate 的响应。
推荐阅读
- arrays - 快速过滤数组中给定的特定元素
- python - Python if 带括号的条件
- javascript - d3工具提示和画笔不能一起工作
- office-js - 我需要测试共享 JavaScript 运行时的 Office 2019 的最低版本或构建版本是多少?
- jquery - 完整日历呈现错误的结束日期
- sql - 如何比较两个表并在比较后在表A中插入值
- javascript - 有没有办法用猫鼬更新用户信息?
- reactjs - 如何使用 react redux 更改数组内对象的值?
- excel - 按下“全部刷新”后如何运行 VBA 代码
- php - 未定义的偏移量:显示 the_content() 时出现 -1 错误;在创世纪儿童主题中