首页 > 解决方案 > Mockito,我在控制器中测试 Post 方法做错了什么?

问题描述

这是我的测试

        @Test
    @WithMockUser(authorities = "ADMIN")
void shouldCreateRestaurant_whenPost() throws Exception {
        // when
        mockMvc.perform(
                post("/restaurant/admin/")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(this.objectMapper.writeValueAsString(RESTAURANT_CREATION_DOMINOS)));
        // then
        Mockito.verify(restaurantService, times(1)).create(RESTAURANT_CREATION_DOMINOS);
    }

它失败了,因为它将对象与 = 进行比较。第一个对象 RestaurantCreationDTO@5980fa73,第二个对象 RestaurantCreationDTO@15a8cebd。但是如何确保使用有效参数调用 restaurantService 呢?

标签: javaspringmockito

解决方案


你有两个选择:

首先- 如果足以检查服务调用中的对象是否确实是RestaurantCreationDTO

Mockito.verify(restaurantService, times(1)).create(any(RestaurantCreationDTO.class));

第二- 如果你真的想检查服务调用中的对象内容

在您的测试课程中

@Captor
ArgumentCaptor<RestaurantCreationDTO> restaurantCreationDtoCaptor;

在您的测试方法中

Mockito.verify(restaurantService, times(1)).create(restaurantCreationDtoCaptor.capture());
assertThat(restaurantCreationDtoCaptor.getValue()).isEqual(RESTAURANT_CREATION_DOMINOS)

推荐阅读