@SpringBootTest 单元测试 ---- 1....运行测试 如果测试某个方法,直接运行要测试的方法。 如果测试类中的多个方法,直接运行测试类。 2. MocMvc(模拟MVC请求,实现接口测试) ---- 1....import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc...mockMvc; @Test public void apiTest() throws Exception { // perform: 执行一个 RequestBuilder...请求 // andExpect: 添加 ResultMatcher -> MockMvcResultMatchers 验证规则 // andReturn: 最后返回相应的
首先,创建对应的 Controller 类的单元测试类,使用 @SpringBootTest 注解标记测试类,来指明是一个基于 Spring Boot 的单元测试类,运行测试类时,框架会创建一个应用上下文...接着使用 @AutoConfigureMockMvc 注解自动装配在 Web 层测试发挥关键作用的 MockMvc 对象,我们编写的控制器方法就是通过 MockMvc 实现测试调用的。...MockMvc 进阶 前面我们使用到的 MockMvc 是由 Spring 帮我们注入的,如果我们想要自定义 MockMvc,又该如何做呢?...为了加快运行测试用例时应用的启动速度,官方提供了专门的注解 @WebMvcTest,保证只初始化 Web 层,而不是整个应用上下文,甚至可以指定某个控制器,达到只对特定控制器以及依赖进行初始化的作用,大大加速测试用例的运行...(new UserController()).build(); } } 需要注意的是使用 standaloneSetup 不会读取任何配置,更贴近这个控制器类的单元测试。
2、为什么使用 mock 测试 避免开发模块之间的耦合 轻量、简单、灵活 3、MockMVC 介绍 基于 RESTful 风格的 SpringMVC 的测试,我们可以测试完整的 Spring MVC 流程...,即从 URL 请求到控制器处理,再到视图渲染都可以测试。...webAppContextSetup(WebApplicationContext wac):指定 WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的 MockMvc,...3)MockMvc 对于服务器端的 SpringMVC 测试支持主入口点。...通过 MockMvcBuilder 构造 MockMvcBuilder 由 MockMvcBuilders 建造者的静态方法去建造。
SpringBoot创建的Maven项目中,会默认添加spring-boot-starter-test依赖。在《5分钟快速上手SpringBoot》中编写的单元测试使用了MockMvc。...为什么使用Mock对象 使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。...使用Mockito一般分三个步骤:1、模拟测试类所需的外部依赖;2、执行测试代码;3、判断执行结果是否达到预期; MockMvc MockMvc是由spring-test包提供,实现了对Http请求的模拟...,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。...一些常用的测试 1.测试普通控制器 mockMvc.perform(get("/user/{id}", 1)) //执行请求 .andExpect(model().attributeExists
控制器的最后一个任务就是将数据打包在模型中,然后指定一个视图的逻辑名称(由该视图名称解析HTML格式的输出),然后将请求和模型、视图名称一起发送回DispatcherServlet(4)。...这里选择独立测试,跟HomeControllerTest不同的地方在于,这里构建MockMvc对象时还调用了setSingleView()函数,这是为了防止mock框架从控制器解析view名字。...在很多情况下并没有这个必要,但是对于SpittleController控制器来说,视图名称和路径名称相同,如果使用默认的视图解析器,则MockMvc会混淆这两者而失败,报出如下图所示的错误: ?...repository、控制器和MockMvc对象,跟之前的几个测试用例相同。...涵盖了Spring MVC处理web请求的处理过程、如何写简单的控制器和控制器方法来处理Http请求、如何使用mockito框架测试控制器方法。
一般有两个方法: 在时间允许的情况下,编写单元测试是程序员对代码的自测,这是对自己代码的负责。 写单元测试的两个动机: 保证或验证实现功能。 保护已经实现的功能不被破坏。...为什么使用Mock对象? 使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。...MockMvc的概念 MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。...第四部分只是针对Service层做了测试,但是咱么也需要对Controller层(API)做测试,这时候就用到MockMvc了,它使得你无需启动项目工程就能测试这些接口 MockMvc实现了对Http请求的模拟...public void save() throws Exception { String json"{……}"; //执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理
,便于测试用例的循环利用 @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true...MockMvc对象,通过webApplicationContext获取控制器 mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext...).build(); //通过类名获取控制器,没有webApplicationContext,不加载项目配置 // mockMvc = MockMvcBuilders.standaloneSteup...// 使用param添加的参数添加到request中的parameter中了, // 而将content内容、类型并没有进行解析,直接添加到request的content中了。....param("favoritesId", "12") .param("title", "测试用例") .param("url", "http
写单元测试的两个动机: 保证或验证实现功能。 保护已经实现的功能不被破坏。 三、Spring Boot引入的MockMvc的概念 1. 什么是Mock?...为什么使用Mock对象? 使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。 3....MockMvc的概念 MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。...MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便...void save() throws Exception { String json"{……}"; //执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理
一、 单元测试的概念 二、单元测试的作用 三、Spring Boot引入的MockMvc的概念 四、Service层的单元测试 五、Controller层的单元测试 六、断言的概念 七、新断言assertThat...写单元测试的两个动机: \1. 保证或验证实现功能。 \2. 保护已经实现的功能不被破坏。 三、Spring Boot引入的MockMvc的概念 \1. 什么是Mock?...为什么使用Mock对象? 使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。 \3....MockMvc的概念 MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。...public void save() throws Exception { String json"{……}"; //执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理
另外的这个应用上下文是由ContextLoaderListener创建的。...从Spring 3.2开始,我们可以按照控制器的方式来测试Spring MVC中的控制器了,就是使用mock Spring MVC测试。...,这个测试在MockMvc构造器上调用了setSingleView()。...这样的话,mock框架就不用解析控制器中的视图名了。这个场景下,如果不用这种方式,按照默认的视图解析规则时,MockMvc就会发生失败,因为无法区分视图路径和控制器的路径。...我们通过使用JSP的方式,简单了解了如何为控制器编写视图。但是就Spring MVC的视图来说,它并不限于本章所看到的简单JSP。
写单元测试的两个动机: 保证或验证实现功能。 保护已经实现的功能不被破坏。 三、Spring Boot引入的MockMvc的概念 什么是Mock?...使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。...MockMvc的概念 MockMvc是由spring-test包提供,实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。...第四部分只是针对Service层做了测试,但是咱么也需要对Controller层(API)做测试,这时候就用到MockMvc了,它使得你无需启动项目工程就能测试这些接口 MockMvc实现了对Http请求的模拟...public void save() throws Exception { String json"{……}"; //执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理
Spring 也提供了完善的测试框架,我们可以方便的测试Spring Web MVC应用程序。为了使用这个测试框架,我们需要添加它的依赖项。...建立测试环境 建立Spring Web MVC的测试环境和普通的Spring 单元测试略有不同。我们需要使用@WebAppConfiguration注解测试类。...这时候可以使用MockMvcBuilders.standaloneSetup来仅使用Spring默认配置配置某个控制器。...而其他域名会正常使用网络来连接,这可以让我们测试CDN等的状况。 然后我们可以使用WebClient来创建测试了。这里我直接贴Spring文档里的例子了。...我们可以利用MockMvc对象来创建RestTemplate,这样就会使用服务端的逻辑来测试代码而不需要启动实际服务器。
使用mock工具可以直接模拟http请求,不用直接产生网络的请求环境,简化了测试流程。...MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便...用到的注解 RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test组件进行单元测试; WebAppConfiguration: 使用这个Annotate...假如使用需要发送json数据格式的时将不能使用这种方式,可见后面被@ResponseBody注解参数的解决方法 andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确...3 使用StatusResultMatchers对请求结果进行验证 4 使用ContentResultMatchers对请求返回的内容进行验证 注意:在实际应用中如果应用到了数据库,在测试过程可能对数据库的增删
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快, 不依赖网络环境, 而且提供了一整套验证框架工具,这样可以使得请求的验证统一而且方便...使用 MockMvc 的测试介于单元测试和集成测试之间。...应用示例: Spring MockMvc Example 下面的应用程序使用 MockMvc 测试 springmvc 应用程序。...我们为模板和 RESTful 控制器方法创建一个测试。...在spring开发中,可以使用Spring自带的MockMvc这个类进行Mock测试。
参考 SpringBoot 使用MockMvc进行Controller的测试 springboot--常用注解--@configration、@Bean 方法1....集成测试@SpringBootTest 请先阅读SpringBoot 使用MockMvc进行Controller的测试,这篇文章已经讲的很清楚了。...= Application.class) @SpringBootTest(classes = xxApplication.class) //测试环境使用,用来表示测试环境使用的ApplicationContext...MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,将会从该上下文获取相应的控制器并得到相应的...MockMvc; mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();//建议使用这种
在测试控制器内添加了三个测试MVC方法,我们接下来开始编写单元测试代码。...@BootstrapWith,该注解才是配置了测试类的启动方式,以及启动时使用实现类的类型。...测试index请求 MockMvc这个类是一个被final修饰的类型,该类无法被继承使用。...这个类是Spring为我们提供模拟SpringMVC请求的实例类,该类则是由MockMvcBuilders通过WebApplicationContext实例进行创建的,初始化MockMvc实例我们可以看下...测试添加 在测试类声明定义全局字段时,我们注入了GoodInfoJPA实例,当然单元测试也不仅仅是客户端也就是使用MockMvc方式进行的,我们也可以直接调用JPA、Service进行直接测试。
模拟Mvc进行Web层测试 Spring Boot提供了MockMvc类,用于模拟HTTP请求和响应,以测试控制器(Controller)的行为和结果。...以下是使用模拟Mvc进行Web层测试的步骤: 创建测试类: 在测试源代码目录下,创建一个新的测试类。 注入MockMvc: 使用@Autowired注解注入MockMvc实例。...编写测试方法: 使用MockMvc模拟HTTP请求,然后使用断言来验证响应结果。...下面是一个示例,展示了如何使用模拟Mvc测试一个简单的控制器: @RunWith(SpringRunner.class) @SpringBootTest public class UserControllerTest...实际项目中的应用 在实际项目中,测试是确保代码质量的重要一环。以下是一些在实际项目中使用Spring Boot测试的最佳实践: 覆盖率分析: 使用工具(如Jacoco)来分析测试覆盖率。
如果以后需要升级Boot库和依赖项,只需在一个地方升级Boot版本,它将负责其余的工作。 让我们实际测试我们在前一个例子中创建的控制器。...有两种方法可以测试控制器: 使用模拟环境 使用嵌入式Servlet容器(如Tomcat或Jetty) 在这个例子中,我们将使用模拟环境: @RunWith(SpringJUnit4ClassRunner.class...出于测试目的,我们需要一个简单的SMTP服务器。在这个例子中,我们将使用Wiser。...请注意,我们在程序中使用的JavaMailSender bean - 这个bean是由Spring Boot自动创建的。...让我们回顾一下使用Spring Boot启动器的好处: 增加pom可管理性 生产环境,测试和支持的依赖配置 减少项目的总体配置时间
使用接口测试工具Postman很方便啊 因为在做系统的自动化持续集成的时候,会要求自动的做单元测试,只有所有的单元测试都跑通了,才能打包构建。比如:使用maven在打包之前将所有的测试用例执行一遍。...对象有以下几个基本的方法: perform : 模拟执行一个RequestBuilder构建的HTTP请求,会执行SpringMVC的流程并映射到相应的控制器Controller执行。...实现的效果和使用MockMvcBuilders构建MockMVC对象的效果是一样的,但是有一个非常明显的缺点:每次做一个接口测试,都会真实的启动一次servlet容器,Spring上下文加载项目里面定义的所有的...因为使用了依赖注入,注入了MockMvc对象,而在上一个例子里面是我们自己new的。...而@AutoConfigureMockMvc注解,该注解表示mockMvc对象由spring 依赖注入构建,你只负责使用就可以了。这种写法是为了让测试在servlet容器环境下执行。
.编写基本的控制器 在Springmvc 中,控制器只是方法上添加@RequestMapping注解类,这个注解声明了他们所要处理的请求.如下所示: @Controller @RequestMapping....在这里,他的目的就是辅助时间组件扫描.当请求"/"路径进来后,他会通过视图解析器返回到"/WEB-INF/views/home.jsp.通过jsp的编写从而展示相关的内容到浏览者面前. 5.2.1.测试控制器..."); } } 另外我们能够使用SpringMVC新的测试特性来进行测试: public class HomeControllerTest { @Test public void...MockMvc mockMvc = standaloneSetup(controller).build(); //执行GET请求 语气得到home视图...mockMvc.perform(get("/")).andExpect(view().name("home")); System.out.println("模拟测试通过"); }
领取专属 10元无门槛券
手把手带您无忧上云