首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Springboot Mockmvc.perform不能处理控制器上的异常?

Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它简化了Spring应用程序的开发过程,并提供了许多开箱即用的功能和特性。

MockMvc是Spring Framework提供的一个用于模拟HTTP请求和响应的测试工具。它可以用于对控制器进行单元测试,验证控制器的行为和输出是否符合预期。

然而,MockMvc.perform方法不能处理控制器上的异常。这是因为MockMvc.perform方法是在测试环境中执行的,它并不会触发真实的请求和响应过程。它只是模拟了HTTP请求和响应的过程,并不会真正调用控制器的方法。

当控制器方法抛出异常时,MockMvc.perform方法并不会捕获和处理这些异常。相反,它会将异常传递给测试代码,以便测试代码可以验证异常是否符合预期。

如果需要测试控制器上的异常处理逻辑,可以使用MockMvcResultHandlers类中的方法来处理异常。例如,可以使用MockMvcResultHandlers.print方法将异常信息打印出来,以便进行调试和分析。

总结起来,Spring Boot的MockMvc.perform方法不能处理控制器上的异常,因为它只是模拟了HTTP请求和响应的过程,并不会真正调用控制器的方法。如果需要测试控制器上的异常处理逻辑,可以使用MockMvcResultHandlers类中的方法来处理异常。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SpringBoot基础之MockMvc单元测试

为什么使用Mock对象 使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。...,在测试之前可能需要初始化); 真实的对象是用户界面,或包括用户界面在内; 真实的对象使用了回调机制; 真实对象可能还不存在; 真实对象可能包含不能用作测试(而不是为实际工作)的信息和方法。...5、得到MvcResult进行自定义断言/进行下一步的异步请求 6、卸载测试环境 注意事项:如果使用DefaultMockMvcBuilder进行MockMvc实例化时需在SpringBoot启动类上添加组件扫描的...,添加结果处理器,比如示例中的打印;andReturn,返回验证成功后的MvcResult,用于自定义验证/下一步的异步处理。...一些常用的测试 1.测试普通控制器 mockMvc.perform(get("/user/{id}", 1)) //执行请求 .andExpect(model().attributeExists

11.8K22

SpringBoot 处理异常的几种常见姿势

使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常 这是目前很常用的一种方式,非常推荐。...新建异常处理类 我们只需要在类上加上@ControllerAdvice注解这个类就成为了全局异常处理类,当然你也可以通过 assignableTypes指定特定的 Controller 类,让异常处理类只处理特定类抛出的异常...@ExceptionHandler 处理 Controller 级别的异常 我们刚刚也说了使用@ControllerAdvice注解 可以通过 assignableTypes指定特定的类,让异常处理类只处理特定类抛出的异常...所以这种处理异常的方式,实际上现在使用的比较少了。...ResponseStatusException 研究 ResponseStatusException 我们先来看看,通过 ResponseStatus注解简单处理异常的方法(将异常映射为状态码)。

67910
  • SpringBoot 处理异常的几种常见姿势

    使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常 这是目前很常用的一种方式,非常推荐。...新建异常处理类 我们只需要在类上加上@ControllerAdvice注解这个类就成为了全局异常处理类,当然你也可以通过 assignableTypes指定特定的 Controller 类,让异常处理类只处理特定类抛出的异常...@ExceptionHandler 处理 Controller 级别的异常 我们刚刚也说了使用@ControllerAdvice注解 可以通过 assignableTypes指定特定的类,让异常处理类只处理特定类抛出的异常...所以这种处理异常的方式,实际上现在使用的比较少了。...ResponseStatusException 研究 ResponseStatusException 我们先来看看,通过 ResponseStatus注解简单处理异常的方法(将异常映射为状态码)。

    98720

    SpringBoot对全局异常的处理封装

    SpringBoot对全局异常的处理封装 一、全局异常处理的简介 springMvc为我们提供的全局异常处理很好的解决了我们在开发中对于异常的捕获与控制,他能够监控所有的@Controller注解类,并提供异常捕捉与处理...@RestControllerAdvice:此注解加在异常捕获的类上 @ExceptionHandler:此注解能够捕获所有额异常 是否对这个有所期待呢?...二、前端提出需求 某日,小黄正在双目无神,死盯电脑代码,其实内心神游,疯狂摸鱼的时候!前端来了,因为测试测出BUG,经前端定位在后台代码上有错误,前端因为没有处理,所以无法提示正确信息!...后端报错,或者后端抛出异常的时候,需要给前端返回错误信息和错误码,小黄拍脑袋灵光一闪,给每一个Controller里面的方法都加上一个try块就轻松解决了!...return error(e); } return ResponseResultUtil.error("未知错误"); } /** * 处理全局异常处理

    95340

    SpringBoot中的异常处理和参数校验

    异常处理 说到异常处理,我不知道大家有没有写过或者遇到过如下的写法。...ex.printStackTrace(); return "出现异常"; } } 那么在SpringBoot中我们就可以通过这样的一个配置可以获取到项目中出现异常的地方,我们可以在这个方法中可以获取出现异常的类的详细信息...注意坑: 这里跟大家分享一个踩过的坑,不能再Filter过滤器中抛出异常,如果通过在过滤器中抛出异常,然后通过异常处理类来处理,那么是不可能的,因为处理器是捕获不到Filter抛出的异常的。...@Validated注解 这个注解其实是Spring提供的,如果你的项目不是SpringBoot项目,需要引一下需要的pom文件,如果是,那么就不用管了,SpringBoot已经帮我们引入了。...return "SUCCESS"; } 跟单一参数校验不一样的是JavaBean的校验方式需要将@Validated写在方法参数,而不是类上。

    79630

    SpringBoot过滤器中的异常处理

    在昨天的文章我跟大家分享了SpringBoot中异常的处理中,我说了一个需要注意的点,就是过滤器中抛出的异常无法被异常处理类捕获,然后这个朋友就问应该如何处理。...其实处理这种问题的处理方式有好几种,那么我就简单分享一下我近期一个项目中的处理方式。...Filter中的异常处理思路 首先我们要明白,在过滤器中我们一般是不会写很长的业务逻辑的,一般都是做一些基础参数或者权限的校验,所以不会出现太过复杂的代码。...既然我们知道代码的长度是可控的,那么在过滤器中我们可以严格的在可能出现异常的地方,用try,catch进行捕获,然后我们通过请求转发的方式转发到对应的Controller上,返回我们需要的json数据;...2、如果你是第一次在你的SpringBoot工程中使用Filter,那么一定要在启动类上加@ServletComponentScan注解,不然Filter是不会生效的。 好了,今天就到这里。

    1.4K10

    SpringBoot中的异常处理与参数校验

    异常处理 说到异常处理,我不知道大家有没有写过或者遇到过如下的写法。...ex.printStackTrace(); return "出现异常"; } } 那么在SpringBoot中我们就可以通过这样的一个配置可以获取到项目中出现异常的地方,我们可以在这个方法中可以获取出现异常的类的详细信息...注意坑: 这里跟大家分享一个踩过的坑,不能再Filter过滤器中抛出异常,如果通过在过滤器中抛出异常,然后通过异常处理类来处理,那么是不可能的,因为处理器是捕获不到Filter抛出的异常的。...@Validated注解 这个注解其实是Spring提供的,如果你的项目不是SpringBoot项目,需要引一下需要的pom文件,如果是,那么就不用管了,SpringBoot已经帮我们引入了。...return "SUCCESS"; } 跟单一参数校验不一样的是JavaBean的校验方式需要将@Validated写在方法参数,而不是类上。

    92120

    SpringBoot 如何优雅的进行全局异常处理?

    在SpringBoot的开发中,为了提高程序运行的鲁棒性,我们经常需要对各种程序异常进行处理,但是如果在每个出异常的地方进行单独处理的话,这会引入大量业务不相关的异常处理代码,增加了程序的耦合,同时未来想改变异常的处理逻辑...针对不同的异常类型,来定义不同的异常处理方法。...ResponseEntityExceptionHandler中为每个异常的处理都单独定义了一个方法,如果默认的处理不能满足你的需求,则可以重写对某个异常的处理。...下面的例子中,我们想获取到用户的信息,如果用户的信息不存在,可以直接抛出一个异常,这个异常会被我们上面定义的全局异常处理方法所捕获,然后根据不同的异常编码,完成不同的处理和返回。...,接下来重点说说为什么@RestControllerAdvice和@ExceptionHandler结合使用可以拦截程序中产生的异常?

    85320

    基于@ControllerAdvice注解的SpringBoot项目全局异常处理

    异常在每个项目或者产品里都是或多或少存在的,那么异常处理就变得尤为重要,像try-catch就是用来处理异常,但如果每个方法都判断处理各类异常,那就头重脚轻了。...因而springboot就引入了全局异常处理,注解@ControllerAdvice就是来干这个事的。 ? 这里写了一个controller,如果去请求的肯定是会报错的,页面展示是这个效果。 ?...接下来就用@ControllerAdvice来定义全局异常来处理。定义一个异常辅助类,把@ControllerAdvice加到类上,注解@ExceptionHandler添加到异常处理方法上。...(value = Exception.class) value 标识了要拦截的类型,Exception.class包含所有了,也可以捕获具体的异常类。 ?...这时候重新在请求上面的地址,展示的就是如下的页面。 ? 我们也可以给异常配上一张有意思的图片,可以在ModelAndView里加以配置,异常页面就不会很单调了。

    89920

    SpringBoot全局异常处理的三种方式

    SpringBoot 全局异常处理 在使用 SpringBoot 开发 Web 应用时,异常处理是必不可少的一部分。在应用中,异常可能会出现在任何地方,例如在控制器、服务层、数据访问层等等。...如果不对异常进行处理,可能会导致应用崩溃或者出现未知的错误。因此,对于异常的处理是非常重要的。 在 SpringBoot 中,有多种方式可以对异常进行处理,本文将介绍其中的三种方式。 1....使用@ControllerAdvice 注解 @ControllerAdvice 是 SpringBoot 提供的一个注解,用于定义全局异常处理器。...这种方式的好处是可以针对不同的控制器方法定义不同的异常处理器。...总结: 在本文中,我们介绍了 SpringBoot 中三种处理异常的方式,分别是使用@ControllerAdvice 注解、@ExceptionHandler 注解和 HandlerExceptionResolver

    2.1K20

    重学SpringBoot系列之Mockito测试

    重学SpringBoot系列之Mockito测试 mock中文文档 使用Mockito编码完成接口测试 编码实现接口测试 为什么要写代码做测试?...: perform : 模拟执行一个RequestBuilder构建的HTTP请求,会执行SpringMVC的流程并映射到相应的控制器Controller执行。...andDo: 添加ResultHandler结果处理器,比如调试时打印结果到控制台 andReturn: 最后返回相应的MvcResult,然后进行自定义验证/进行下一步的异步处理 上面的整个过程,我们都没有使用到...详解 事务管理在应用开发中是种不可或缺的设计,它是数据库持久化处理的一种标准。...比如:对象B依赖于对象A,但是A代码还没写是一个空类空方法不能用,我们来mock一个假的A来完成测试。 为什么要使用Mock?

    2.5K20

    看看别人家 SpringBoot 的全局异常处理,多么优雅....

    :cnblogs.com/xuwujing/p/10933082.html 前言 本篇文章主要介绍的是 SpringBoot 项目进行全局异常的处理。...代码编写 SpringBoot 的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我们需要对这些异常进行统一的捕获并处理。...SpringBoot 中有一个ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理...其它 关于 SpringBoot 优雅的全局异常处理的文章就讲解到这里了,如有不妥,欢迎指正!...项目地址 SpringBoot 全局异常的处理项目工程地址: https://github.com/xuwujing/springBoot-study/tree/master/springboot-exceptionHandler

    45000

    如何在 SpringSpring Boot 中优雅地做参数校验?

    (Github无法访问或者访问速度比较慢的小伙伴可以看码云上的对应内容) 数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些...但是,不太建议这样来写,这样的代码明显违背了 单一职责原则。大量的非业务代码混杂在业务代码中,非常难以维护,还会导致业务层代码冗杂! 实际上,我们是可以通过一些简单的手段对上面的代码进行改进的!...$ :精确匹配 string 字符串 (^Man$|^Woman$|^UGM$) : 值只能在 Man,Woman,UGM 这三个值中选择 GlobalExceptionHandler 自定义异常处理器可以帮助我们捕获异常...,并进行一些简单的处理。...如果对于下面的处理异常的代码不太理解的话,可以查看这篇文章 《SpringBoot 处理异常的几种常见姿势》。

    2K10
    领券