[英]Unit testing Spring Boot based REST endpoint which returns collection of objects ordered by given direction
我是 spring 引导的新手,仍在学习中。 如果我问的问题不是很相关,请多多包涵。 我已经看到类似下面的代码,据我了解,这段代码本质上是根据给定的排序顺序 ASC 或 DESC 搜索一些记录并返回排序的结果集。 我们真的需要写一个单元测试来验证rest controller 序列化的结果集的顺序还是你认为单元测试排序行为不属于controller 级别的责任? 非常感谢您的建议和想法。
@RestController
@RequestMapping
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;
@GetMapping("/orders")
public ResponseEntity<List<Order>> getAllOrders(@RequestParam(required = false) String direction){
return ResponseEntity.ok(orderService.getAllOrdersSortedByName(direction));
}
}
如果我们使用 mocking 服务调用行为编写如下所示的单元测试,是否可以将其视为有意义的测试用例?
@Test
void findAllOrderDesc() {
Order o1 = Order.id(1).name("A").build();
Order o2 = Order.id(2).name("B").build();
when(orderService.getAllOrdersSortedByName(anyString())).thenReturn(List.of(o2,o1));
mockMvc.perform(get("/orders?direction=DESC"))
.andExpect(status().isOk())
.andExpect(jsonPath("$",hashSize(2)))
.andExpect(jsonPath("$.[0].name",is("B")))
.andExpect(jsonPath("$.[1].name",is("A")));
}
在我看来,您应该测试 Controller 端点,就好像您不知道它基本上委托给服务一样。
鉴于您是 mocking 服务响应,那么您至少应确认 JSON 具有预期顺序的元素。 话虽如此,您的测试确实有意义(您并没有真正测试排序功能本身,而是假设服务已经以正确的排序响应来测试 JSON 序列化)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.