首页 > 其他分享 >Spring Boot 1.5.x 结合 JUnit5 进行接口测试

Spring Boot 1.5.x 结合 JUnit5 进行接口测试

时间:2023-05-14 11:46:10浏览次数:57  
标签:WebApplicationContext 1.5 Spring Boot 测试 test

在Spring Boot 1.5.x中,默认使用Junit4进行测试。而在对Controller进行接口测试的时候,使用 @AutoConfigureMockMvc 注解是不能注入 MockMvc 对象的。因此只能使用 WebApplicationContext 类去构建 MockMvc 对象。
在Spring Boot 1.5.x + Junit4 的前提下,测试类的代码是这样写的:

@SpringBootTest
@RunWith(SpringRunner.class)
public class DemoControllerTest {
    @Autowired
    private WebApplicationContext webApplicationContext;
    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void demoTest() {
        MvcResult mvcResult = mockMvc.perform(post("/api/demo")
                              .contentType(MediaType.APPLICATION_JSON)
                              .content(jsonStr))
                              .andExpect(jsonPath("$.data").values(expectedValue))
                              .andDo(print())
                              .andReturn();
    }
}

但是,当我们把Junit版本升级到Junit5时,由于Junit5不再支持@RunWith注解,导致我们无法获取到 WebApplicationContext 对象,测试也就无法运行了。
经过网上各种搜索,终于找到一个既能完成测试,又不需要升级 Spring Boot 版本的方法。
我们在pom.xml中引入如下包

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>
<!-- ... -->
    <dependency>
        <groupId>com.github.sbrannen</groupId>
        <artifactId>spring-test-junit5</artifactId>
        <version>1.5.0</version>
        <scope>test</scope>
    </dependency>

这样就可以在测试类上加上 @ExtendWith(SpringExtension.class),使 WebApplicationContext 的对象可以被自动注入了。

spring-test-junit5 的 github 地址见 https://github.com/sbrannen/spring-test-junit5

标签:WebApplicationContext,1.5,Spring,Boot,测试,test
From: https://www.cnblogs.com/ryuasuka/p/17398979.html

相关文章

  • Java:SpringBoot整合MyBatis-Plus实现MySQL数据库的增删改查
    MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。文档https://baomidou.com/目录一、引入坐标二、配置三、CURD测试四、API数据接口一、引入坐标<dependency><groupId>com.baomidou</groupId><artifactId>m......
  • 大公司为什么禁止SpringBoot项目使用Tomcat?
    前言在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于Tomcat,那我们如何使用Undertow技术呢?本文将为大家细细讲解。Spr......
  • java基于springboot基于vue的地方美食分享网站、美食管理系统,附源码+数据库+lw文档+PP
    1、项目介绍java基于springboot基于vue的地方美食分享网站、美食管理系统。(a)管理员;管理员使用本系统涉到的功能主要有:首页,个人中心,用户管理,外国美食管理,中式美食管理,热门菜品管理,论坛管理,我的收藏管理,留言板管理等功能。(b)用户;用户使用本系统涉到的功能主要有:首页,外国美食,......
  • Springboot集成mybatis
    目的利用Springboot快速集成Mybatis。集成步骤引入依赖在pom文件中加入:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.0</version></dependency&......
  • [springboot] 上传文件时,报"org.apache.tomcat.util.http.fileupload.impl.FileSizeLi
    1问题描述基于springmvc/springboot的MultipartFile接口实现上传文件功能时,报如下错误日志[2023/05/1322:31:54.732][TID:N/A][INFO][http-nio-8769-exec-5][AccessPathWebFilter.java:85doFilter][3-4]request-path:http://love.pfr.kim/user-service/v1/file-re......
  • 一、SpringCloud Alibaba之Nacos作为注册中心
    一、简介SpringCloud阿里巴巴旨在为微服务开发提供一站式解决方案。该项目包括开发分布式应用程序和服务所需的组件,以便开发人员可以使用SpringCloud编程模型轻松地开发分布式应用。使用SpringCloudAlibaba,只需要添加一些注释和配置,就可以将阿里巴巴的分布式解决方案用于您的......
  • springboot项目
    1.根据数据库先把User类写完:publicclassUser{privateintid;privateStringusername;privateStringpassword;privateStringemail;privateStringrole;privatebooleanstate;将其实例化后写一个空方法,写get和set方法和tostring方法到此bean......
  • 关于SpringBoot应用的启动状态检查
    关于SpringBoot启动状态的检查背景:当项目由多个SpringBoot的jar包构成,为简化启动流程,写了一个启动脚本,执行脚本的start命令即可启动多个SpringBoot的jar包。原先的启动状态的判断是使用进程号和端口号来判断的,但是这种判断方式对于SpringBoot程序来说并不准确。当服务器的内存为......
  • springboot 低于 2.6 版本设置 SameSite=None,springboot 1.x set SameSite=none in em
    speingboot使用自带的tomcat运行,设置SameSite。springboot过低的版本没有SameSite的属性设置,升级到1.5.22版本后,虽然Rfc6265CookieProcessor有 setSameSiteCookies方法,但是方法逻辑有BUG,当不是None时才可以设置成功:SameSiteCookiessameSiteCookiesValue=thi......
  • Spring整合Mybatis方式
    方式一student.javapackageorg.example.User;importlombok.Data;@Datapublicclassstudent{privateintid;privateStringusername;privateStringpassword;}userMapper.javapackageorg.example.mapper;importorg.example.User.student;......