springboot对controller方法进行单元测试

这篇具有很好参考价值的文章主要介绍了springboot对controller方法进行单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单元测试有助于验证程序的执行逻辑是否正确。controller层的单元测试,已经和接口测试很类似了。执行单元测试以前,需要添加测试依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

1. 生成一个单元测试基础类

package com.demo.order.controller;

import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;

/**
 * 
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class BaseSpringBootTest {

    protected Logger logger = LoggerFactory.getLogger(BaseSpringBootTest.class);

    @Before
    public void init() {
        logger.info("开始测试...");
    }

    @After
    public void after() {
        logger.info("测试结束...");
    }
}

注意需要添加的注解。

2. 没有参数的单元测试

package com.demo.order.controller;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

/**
 * 
 */
public class OrderControllerTest extends BaseSpringBootTest {

    @Autowired
    private OrderController orderController;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(orderController).build();
    }

    @Test
    public void demo() throws Exception {
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/order/add"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();

        logger.info(mvcResult.getResponse().getContentAsString());
    }

}

执行单元测试,可以看到如下输出:

2022-01-08 17:06:43.936  INFO 24860 --- [           main] c.f.order.controller.BaseSpringBootTest  : 开始测试...
2022-01-08 17:06:43.962  INFO 24860 --- [           main] o.s.mock.web.MockServletContext          : Initializing Spring TestDispatcherServlet ''
2022-01-08 17:06:43.962  INFO 24860 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2022-01-08 17:06:43.962  INFO 24860 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 0 ms
下单成功

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /order/add
       Parameters = {}
          Headers = []
             Body = <no character encoding set>
    Session Attrs = {}

Handler:
             Type = com.demo.order.controller.OrderController
           Method = com.demo.order.controller.OrderController#add()

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"text/plain;charset=ISO-8859-1", Content-Length:"12"]
     Content type = text/plain;charset=ISO-8859-1
             Body = Hello world!
    Forwarded URL = null
   Redirected URL = null
          Cookies = []
2022-01-08 17:06:44.051  INFO 24860 --- [           main] c.f.order.controller.BaseSpringBootTest  : Hello world!
2022-01-08 17:06:44.060  INFO 24860 --- [           main] c.f.order.controller.BaseSpringBootTest  : 测试结束...
2022-01-08 17:06:44.081  INFO 24860 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

3. 有参数的单元测试(json格式)

MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/encryption")
                                     .accept(MediaType.APPLICATION_JSON).param("originContent", "15221365094"))
                                     .andExpect(MockMvcResultMatchers.status().isOk())
                                     .andDo(MockMvcResultHandlers.print())
                                     .andReturn();

这里的.accept(MediaType.APPLICATION_JSON).param("originContent", "15221365094"))就是增加json格式的参数。

4. 有参数的单元测试(对象转json)

MobileTelephoneRequest request = new MobileTelephoneRequest();
        request.setCustomerId("RL20180304000099");
        request.setMobileTelephone("18883270484");
        request.setCcfMobileTelephone("13904108866");
        
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/customerEncryption/save")
                                     .contentType(MediaType.APPLICATION_JSON)
                                     .content(JSONObject.toJSONString(request)))
                                     .andExpect(MockMvcResultMatchers.status().isOk())
                                     .andDo(MockMvcResultHandlers.print())
                                     .andReturn();

5. 一次性执行多个单元测试

package com.demo.order.controller;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

/**
 * 打包测试
 * 配置测试类,一次性执行所有配置的测试类
 */
@RunWith(Suite.class)
@Suite.SuiteClasses({OrderControllerTest.class,DemoControllerTest.class})
public class SuiteExecuteTests {
    // 不用写代码,只需要注解即可(在SuiteClasses中配置测试类)
}

单元测试可以将程序启动和测试结合起来,一般用于开发和测试环境。这样就避免了必须借助于工具或者自己写代码构造http请求的繁琐。文章来源地址https://www.toymoban.com/news/detail-515958.html

到了这里,关于springboot对controller方法进行单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java对私有方法进行单元测试及示例

    在Java中,我们不能直接对私有方法进行单元测试。因为单元测试的目的是测试公共接口,而私有方法是内部实现的一部分。然而,如果有必要测试私有方法,可以使用反射来访问和调用私有方法。 以下是一个使用反射测试私有方法的示例: 在上述示例中,我们创建了一个

    2024年02月06日
    浏览(33)
  • SpringBoot下进行单元测试

    工程升级SpringBoot之后,突然发现之前写的几个简单的单元测试类无法正常执行了,因为SpringBoot工程的配置方式与之前还是有比较大的差异。 而且之前直接使用Junit来写单元测试,这一次打算直接升级到SpringBoot的Test方式。 1、引入依赖包 之前是直接引用junit依赖包,需要更改

    2024年02月08日
    浏览(39)
  • 【JAVA开发面试】如何处理并发访问如何进行代码的单元测试Java多线程编程消息中间件设计模式技术难题是如何解决的

    【 点我-这里送书 】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明

    2024年02月03日
    浏览(39)
  • 如何在Java中进行单元测试?

    首先,单元测试是什么?简单来说,单元测试就是测试代码的最小单元。在Java中,这个最小单元通常是方法。当你编写一个方法时,你其实已经在写单元测试了,因为你的方法需要满足一定的输入,然后产生一定的输出。 但是,我们通常说的单元测试是指编写一些额外的代

    2024年02月03日
    浏览(33)
  • 若依微服务版(SpringBoot/SpringCloudAlibaba)中在单个服务模块中进行单元测试

    若依微服务版手把手教你本地搭建环境并运行前后端项目: 若依微服务版手把手教你本地搭建环境并运行前后端项目_霸道流氓气质的博客-CSDN博客 在上面的基础上需要在某个服务模块中进行单元测试。 注: 博客: 霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

    2024年02月06日
    浏览(40)
  • springboot开启单元测试的方法分享

    转自: Spring Boot如何进行单元测试呢? SpringBoot:     Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃

    2023年04月21日
    浏览(24)
  • java常见面试题:如何使用Java进行单元测试?

    单元测试是软件开发中的一个重要环节,它确保每个单独的代码单元都能按照预期工作。以下是如何使用Java进行单元测试的详细说明: JUnit : JUnit是Java中最流行的单元测试框架。 首先,添加JUnit依赖到你的项目中。如果你使用Maven,可以在 pom.xml 中添加以下依赖: 复制代码

    2024年02月02日
    浏览(41)
  • 使用vscode进行python的单元测试,提高开发效率

    单元测试在我们的开发过程中非常有必要,它可以验证实现的一个函数是否达到预期。以前在学校写代码时,都是怼一堆代码,然后直接运行,如果报错再一步步调试,这样大部分时间都浪费在调试工作上。工作后发现大家都使用单元测试,这样做其实更规范,也提高了开发

    2024年02月03日
    浏览(47)
  • JAVA:利用JUnit进行高效的单元测试

    1、简述 在软件开发中,单元测试是确保代码质量和可维护性的关键步骤。JUnit作为Java领域最流行的单元测试框架之一,提供了简单而强大的测试工具,可以帮助开发者在项目开发过程中及时发现和修复代码中的问题。本文将介绍JUnit的基本用法以及一些高效的单元测试技巧,

    2024年02月03日
    浏览(52)
  • 单元测试实战(一)Controller 的测试

    为鼓励单元测试,特分门别类示例各种组件的测试代码并进行解说,供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战(一)Controller 的测试 单元测试实战(二)Service 的测试    单元测试实战(三)JPA 的测试     单元测试实战(四)MyBatis-Plus 的测试 单元测试实

    2024年02月04日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包