Spring Boot中使用MockMvc测试PATCH请求控制器

news/2025/2/10 20:48:50/

在Spring Boot项目中,对控制器进行单元测试是确保代码质量和功能正确性的重要环节。本文将通过一个具体的例子,展示如何使用Spring的MockMvc框架来测试处理PATCH请求的控制器。

  1. 示例项目结构
    假设我们有一个简单的Spring Boot项目,其中包含一个ArticleController,用于处理与文章相关的PATCH请求。以下是控制器的代码:
    java复制
    @Controller
    @RequestMapping(“/articles”)
    public class ArticleController {
    @Autowired
    private ArticleService articleService;

    // 处理JSON和XML格式的PATCH请求
    @PatchMapping(“/{id}”)
    @ResponseBody
    public String patchArticle(@RequestBody Article article) {
    System.out.println("Article updating in controller: " + article);
    articleService.updateArticle(article.getId(), article.getContent());
    return "Article updated with content: " + article.getContent();
    }

    // 处理x-www-form-urlencoded格式的PATCH请求
    @PatchMapping(value = “/{id}”, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    @ResponseBody
    public String patchArticle(@RequestBody MultiValueMap<String, String> formParams) {
    System.out.println(formParams);
    long id = Long.parseLong(formParams.getFirst(“id”));
    String content = formParams.getFirst(“content”);
    articleService.updateArticle(id, content);
    return "Article updated with content: " + content;
    }
    }

  2. 测试环境配置
    为了进行单元测试,我们需要配置测试环境。以下是相关的配置代码:
    java复制
    @EnableWebMvc
    @Configuration
    @ComponentScan
    public class MyWebConfig implements WebMvcConfigurer {
    }

  3. 单元测试代码
    我们将分别测试处理XML、JSON和x-www-form-urlencoded格式的PATCH请求。以下是测试代码:
    3.1 测试XML格式的PATCH请求
    java复制
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(classes = MyWebConfig.class)
    public class ControllerPatchTests {
    @Autowired
    private WebApplicationContext wac;
    private MockMvc mockMvc;

    @Before
    public void setUp() {
    mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Test
    public void testXmlController() throws Exception {
    long id = 1;
    String content = “new updated content”;
    MockHttpServletRequestBuilder builder =
    MockMvcRequestBuilders.patch(“/articles/” + id)
    .contentType(MediaType.APPLICATION_XML_VALUE)
    .accept(MediaType.APPLICATION_XML)
    .characterEncoding(“UTF-8”)
    .content(getArticleInXml(id, content));
    this.mockMvc.perform(builder)
    .andExpect(MockMvcResultMatchers.status().isOk())
    .andExpect(MockMvcResultMatchers.content().string("Article updated with content: " + content))
    .andDo(MockMvcResultHandlers.print());
    }

    private String getArticleInXml(long id, String content) {
    return “

    ” + id + “” + content + “

http://www.ppmy.cn/news/1570955.html

相关文章

采用gitlab的package registry 方式 通过api 上传发布包,解决git命令拉取大文件异常退出问题

一、gitlab的package registry&#xff0c;解决git命令拉取大文件异常退出问题&#xff0c;上传文件命令可以按照&#xff1a; 1# 88-gongyin_publish群组下项目publish_file的ID【固定】 2# sit -定义哪个环境的介质 如集成测试环境 or 生产 prod【流水线入参】 3#20250205-定…

【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表

目录结构如下&#xff1a; https://github.com/kaede316/Pythons_pj.git 效果&#xff1a; 后续可扩展为工具网站&#xff1a; 更新 2025.02.09 1、增加等间距制作人 时间信息 2、增加判断润年的功能

Linux网络编程6——UDP通信

一.UDP通信 1.TCP通信和UDP通信各自的优缺点 TCP&#xff1a; 面向连接的&#xff0c;可靠数据包传输。对于不稳定的网络层&#xff0c;采取完全弥补的通信方式。 丢包重传。​ 优点&#xff1a; ​ 稳定。 ​ 数据流量稳定、速度稳定、顺序 ​ 缺点&#xff1a; ​ 传…

stm32电机驱动模块

电机驱动模块是智能车等电子设备中用于驱动电机运转的重要部件&#xff0c;它能将微控制器输出的控制信号转换为足够的功率和电流来驱动电机。以下为你详细介绍电机驱动模块的相关信息&#xff1a; 常见类型 1. L298N 电机驱动模块 特点 高电压、大电流驱动能力&#xff1a;能…

Dart语言的云计算

Dart语言在云计算中的应用 引言 云计算作为一种新兴的计算模式&#xff0c;为各行各业带来了重大变革。借助于云计算&#xff0c;用户可以通过互联网获取和使用各种资源&#xff0c;如计算能力、存储、数据库等。随着云计算的快速发展&#xff0c;编程语言的选择变得愈发重要…

Java 一键将 Word 文档转为 PDF

嘿&#xff0c;朋友们&#xff01;在开发中&#xff0c;经常会碰到需要把 Word 文档转换成 PDF 格式的需求&#xff0c;像生成报告、合同啥的。Java 有不少好用的库能实现这个功能&#xff0c;下面就给大家介绍两种常见的方法&#xff0c;分别使用 Apache POI 和 Docx4J 结合 i…

在Mac mini M4上部署DeepSeek R1本地大模型

在Mac mini M4上部署DeepSeek R1本地大模型 安装ollama 本地部署&#xff0c;我们可以通过Ollama来进行安装 Ollama 官方版&#xff1a;【点击前往】 Web UI 控制端【点击安装】 如何在MacOS上更换Ollama的模型位置 默认安装时&#xff0c;OLLAMA_MODELS 位置在"~/.o…

Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)

一、网络 早期的计算机程序都是在本机上运行的&#xff0c;数据存储和处理都在同一台机器上完成。随着技术的发展&#xff0c;人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用&#xff0c;其运行环 境仅限于个人计算机内部。这种设置虽然…