日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了為什么測試成功時MockMvc請求檢索空的響應正文?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試測試我的Spring Boot REST控制器,以檢查如果Bean驗證失敗,請求是否發送屬性錯誤。

我有一個@RestController:

@RestController
@RequestMapping("/restaurants")
public class RestaurantsApiController {

    private final RestaurantService restaurantService;
    private final ProductRepository productRepository;
    private final ProductMapper productMapper;

    public RestaurantsApiController(RestaurantService restaurantService, ProductRepository productRepository, ProductMapper productMapper) {
        this.restaurantService = restaurantService;
        this.productRepository = productRepository;
        this.productMapper = productMapper;
    }

    @PostMapping("{id}/products")
    public ResponseEntity<ProductDto> addProduct(@PathVariable Long id,
                                                 @Valid @RequestBody ProductDto productDto){
        Product product = this.restaurantService.addProduct(id, productMapper.productDtoToProduct(productDto));
        return new ResponseEntity<>(productMapper.productToProductDto(product), HttpStatus.CREATED);
    }

我有一個帶有@ControllerAdance注釋的自定義異常處理程序:

@ControllerAdvice
public class ExceptionControllerAdvice {
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public ResponseEntity<Object> validationException(MethodArgumentNotValidException ex, WebRequest request) {
        ....
// here i format my custom error message
        return new ResponseEntity<>(apiError, new HttpHeaders(), apiError.getStatus());
    }

它運行良好,如果驗證失敗,則向我發送此自定義響應:

{
    "status": "BAD_REQUEST",
    "errors": {
        "price": "doit être supérieur ou égal à 0",
        "name": "ne doit pas être nul",
        "category": "ne doit pas être nul"
    }
}

我正在嘗試使用mock Mvc測試此測試類的行為:

@ExtendWith(MockitoExtension.class)
class RestaurantsApiControllerTest {

    @Mock
    private RestaurantService restaurantService;
    @Mock
    private ProductRepository productRepository;
    @Mock
    private ProductMapper productMapper;
    @InjectMocks
    private RestaurantsApiController controller;

    MockMvc mockMvc;

    @BeforeEach
    void setUp() {
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }

    @Test
    void givenInvalidFrom_whenAddProduct_ThenShouldThrowException() throws Exception {
        // productDto miss name, category and have negative value for price which is forbidden by validations annotations
        ProductDto productDto = ProductDto.builder().id(1L).price(-10.5D).build();

        MvcResult mvcResult = mockMvc.perform(post("/restaurants/1/products")
                .contentType(MediaType.APPLICATION_JSON)
                .content(asJsonString(productDto)))
                .andExpect(status().isBadRequest())
                .andReturn();

        String result = mvcResult.getResponse().getContentAsString();

        then(restaurantService).shouldHaveNoInteractions();
    }

測試完全通過,我可以在日志中看到驗證異常預期正常:

14:53:30.345 [main] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument ...
//I removed the rest of the message for readability, but each validation exception appears here properly
14:53:30.348 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Completed 400 BAD_REQUEST

但是我找不到一種方法來測試我的錯誤映射是否包含我期望的字段。當我嘗試使用:

檢索響應正文時

String result = mvcResult.getResponse().getContentAsString();

字符串為空,我找不到任何測試響應正文的方法。

我完全沒有想法,如果能幫上忙,我會非常感激的!

非常感謝!

推薦答案

使用Builder配置MockMvc實例時,請進行以下更新:

MockMvcBuilders
    .standaloneSetup(controller)
    .setControllerAdvice(new ExceptionControllerAdvice())
    .build()

您應該手動設置控制器建議以模擬MVC上下文,否則它將被忽略。
在此更新之后,您將收到錯誤響應中的正文。如果您想驗證Json Body,請使用上面答案中的json路徑API。

這篇關于為什么測試成功時MockMvc請求檢索空的響應正文?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:MockMvc 響應 成功 檢索 正文 測試 請求
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定