繁体   English   中英

单元测试 Spring 基于引导 REST 返回按给定方向排序的对象集合的端点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM