首页
学习
活动
专区
工具
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.4K21

SpringBoot 处理异常几种常见姿势

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

65510

SpringBoot 处理异常几种常见姿势

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

96220

SpringBoot对全局异常处理封装

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

91140

SpringBoot异常处理和参数校验

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

75330

SpringBoot异常处理与参数校验

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

88620

SpringBoot过滤器中异常处理

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

1.3K10

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

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

55120

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

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

88020

SpringBoot全局异常处理三种方式

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

1.3K20

重学SpringBoot系列之Mockito测试

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

2.4K20

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

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

42300

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

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

1.8K10
领券