【问题标题】:Spring MVC testSpring MVC 测试
【发布时间】:2020-01-29 16:41:12
【问题描述】:

我正在努力学习spring,我找不到足够的资源进行测试,对不起我的英语:) 我有一个控制器类,它返回 ResponseEntity

    @RestController
    @RequestMapping("/")
    public class OrderController {

    @Autowired
    private OrderRepository rep;

    @GetMapping("/{id}")
    public ResponseEntity<?> getOrderById(@PathVariable("id") String id){
        Order or = rep.findById(id).get();
        return ResponseEntity.ok(or); }
    @PostMapping("/add")
    public ResponseEntity<?> addOrder(@RequestBody Order order){
        rep.save(order);
        return ResponseEntity.ok(order);
}

我正在尝试使用

 @RunWith(SpringRunner.class)
 @WebMvcTest(OrderController.class)
 public class OrderControllerTest {

    @Autowired
    private MockMvc mockMvc;
    @MockBean
    private OrderRepository orderRepository;
    @Test
    public void shouldPresistOrder() throws Exception {

        this.mockMvc.perform(get("/ORD00001").accept("application/json"))
        .andExpect(status().isOk());}}

我得到了预期的状态但是是 我是否需要先创建一个 Order 实例,因为它是一个包含很多变量的非常大的类? 端点测试方法有哪些?是否有任何书籍或在线资源仅用于 MVC 测试目的?非常感谢

【问题讨论】:

  • 在您的情况下,您可以先调用addOrder,然后使用之前创建的order id 调用getOrderById。但是您将订单存储在哪里?在内存或某种数据库中?如果是数据库,您可能需要在测试开始之前模拟/启动数据库。

标签: java spring-boot unit-testing spring-mvc spring-data-jpa


【解决方案1】:

您正在模拟 OrderRepository 类,但没有与之关联的规则, 创建一个虚拟 Order 并添加这样的规则 when(orderRepository.findById(&lt;id in the dummy order&gt;)).thenReturn(DummyOrder) 通过这种方式,您可以为 OrderRepository 设置规则以根据您的需要运行。

【讨论】:

  • 我需要手动填充订单类吗?订单订单 = 新订单(); order.setId; order.setName; ....
  • 我得到:“不适用于参数(Order)” Order order = Mockito.mock(Order.class); Mockito.when(orderRepository.findById(anyString())).thenReturn(order);
  • 是的,您需要手动填充订单类请注意返回的订单应该是可选订单对象
  • @Test public void shouldPresistOrder() throws Exception { Order o = new Order("ORD00001", "ABCD"....) Optional order = Optional.of(o); when(orderRepository.findById("/ORD00001")).thenReturn(order);this.mockMvc.perform(get("/ORD00001").accept("application/json")) .andExpect(status().isOk( ));我仍然得到预期的状态 但是?
  • 您可以调试代码并检查 rep 对象 id 是否与您的控制器相同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2015-08-07
  • 2011-08-23
  • 2018-03-02
  • 2015-11-27
  • 2017-12-04
  • 1970-01-01
相关资源
最近更新 更多