如何使用 MockHttpServletRequest 对文件上传进行单元测试?

2024-01-04

我有一个 Spring (3.0) 控制器,其方法具有HttpServletRequest作为参数之一,因为它正在处理(多个)文件上传。

@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload",
    method = RequestMethod.POST)
@ResponseBody
public final String uploadClassifiedPicture(
    @PathVariable int idClassified,
    @PathVariable int idPerson, 
    @RequestParam String token, 
    HttpServletRequest request);

如何进行单元测试?我知道我可以创建一个MockHttpServletRequest,但我不知道如何将一个或多个文件传递给它。

MockHttpServletRequest request = new MockHttpServletRequest("POST", 
     "/classified/38001/dealer/54/upload?token=dfak241adf");

我建议稍微更改方法签名,以使上传的文件成为普通参数(类型为MultipartFile http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/multipart/MultipartFile.html (not CommonsMultipartFile http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/multipart/commons/CommonsMultipartFile.html)):

@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload",
    method = RequestMethod.POST)
@ResponseBody
public final String uploadClassifiedPicture(
    @PathVariable int idClassified,
    @PathVariable int idPerson, 
    @RequestParam String token, 
    @RequestParam MultipartFile content);

然后你可以使用MockMultipartFile http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/mock/web/MockMultipartFile.html在你的测试中:

final String fileName = "test.txt";
final byte[] content = "Hallo Word".getBytes();
MockMultipartFile mockMultipartFile =
       new MockMultipartFile("content", fileName, "text/plain", content);

uploadClassifiedPicture(1, 1, "token", mockMultipartFile);

如果您不想更改方法签名,那么您可以使用MockMultipartHttpServletRequest http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/mock/web/MockMultipartHttpServletRequest.html反而。

它有一个方法addFile(MultipartFile file) http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/mock/web/MockMultipartHttpServletRequest.html#addFile%28org.springframework.web.multipart.MultipartFile%29。当然,所需的参数可以是MockMultipartFile.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MockHttpServletRequest 对文件上传进行单元测试? 的相关文章

  • 如何强制jar使用(或jar运行的jvm)utf-8而不是系统的默认编码

    我的Windows默认编码是GBK 而我的Eclipse完全是utf 8编码 因此 在我的 Eclipse 中运行良好的应用程序崩溃了 因为导出为 jar 文件时这些单词变得不可读 我必须在 bat 文件中写入以下行才能运行该应用程序 st
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 如何从 Spring Boot 中排除依赖项

    我正在使用 Spring Boot 以下是我的 gradle 文件 buildscript ext springBootVersion 2 0 0 BUILD SNAPSHOT repositories mavenCentral maven
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • HttpClient请求设置属性问题

    我使用这个 HttpClient 库玩了一段时间 几周 我想以某种方式将属性设置为请求 不是参数而是属性 在我的 servlet 中 我想使用 Integer inte Integer request getAttribute obj 我不
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • “清理”用户提交的 Javascript - 所以它仍然有效!

    我计划在我的网站中设置一个功能 用户可以提交 HTML CSS 和 JS 然后将其 实时 生成为完整的 HTML 工作页面 其他用户将能够看到这一点 这些页面需要有有效的 Javascript 我知道这本身就是一个相当大的安全缺陷 但该功能
  • Excel LEN() 函数对长度超过 20 个字符的数字返回 5

    当我的数字超过 20 个字符时 Excel 中的 LEN 函数返回 5 我已经在桌面和移动设备上尝试过此操作 并得到相同的结果 当我使用 评估公式 时 它显示它从 LEN 100000000000000000000 20个零 到 5 如果有
  • 驱动程序的卸载按钮被禁用

    我已经为虚拟设备编写了相当简单的第一个驱动程序 它还有一个 inf 我使用安装驱动程序开发者大会 http support microsoft com kb 311272 它安装良好且功能正常 但我的问题是当我尝试卸载它时 devcon e
  • 使用语义发布获取下一个标签版本

    您好 我在我的存储库中使用语义发布进行版本控制 在我的 Gitlab 中 当我将分支与 master 合并时 我的标签会根据提交而增加 并且工作正常 有什么方法可以让我获得合并之前的 下一个标签版本 我想在合并之前将下一个版本写入文件 尝试
  • 不同基于 C# 的服务之间的通信

    有没有办法在两个不同的服务之间进行通信 我有一项已经运行的服务 有没有办法创建第二个服务 可以附加到第一个服务并向其发送和接收日期 我还想从控制台应用程序访问 Windows 服务并附加到它 是否可以 您可以尝试使用以下方法来实现 IPC
  • 检测语音转文本中的填充词

    我使用 Google Speech API 进行语音到文本的转换 但是 它会过滤掉填充词 例如 呃 嗯 啊 等 我有什么办法可以获得包含填充词的文本吗 使用更灵活的API 如Kaldihttp kaldi asr org http kald
  • apn_sender 和 Rails 3

    我有一个项目需要从服务器向设备发送通知 我不知道如何以及从哪里开始 首先创建表或其他 因为我是 Ruby on Rails 的新手 我已经按照 apn sender 教程进行操作 但它不起作用并且在启动时总是出错 有没有为 Rails 3
  • do.call 构建并执行 data.table 命令

    我有一个小data table代表每个测试单元格的一条记录 AB 测试结果 并且我想添加更多的列来将每个测试单元格与其他测试单元格进行比较 换句话说 我想要添加的列数将取决于相关 AB 测试中有多少个测试单元 My data table好像
  • Python SocketServer 可在本地主机上运行,​​但不能在服务器上运行

    下面是我当前正在使用的代码 usr bin python print Content type application print n n import SocketServer import cgitb cgitb enable clas
  • 角度动画:为父元素和子元素添加动画

    我创建了一个元素 div parent 以及效果很好的 Angular 动画 当我向其中添加一个子元素并尝试同时为子元素设置动画时 其中一个动画最终不会运行 它只是捕捉到新状态 堆栈闪电战 https stackblitz com edit
  • PyBrain 中的 _convertToOneOfMany

    我遵循 PyBrain 教程使用前馈神经网络进行分类 http pybrain org docs tutorial fnn html并想建立我自己的分类器 我不明白怎么办 convertToOneOfMany修改输出 为什么初始操作会all
  • 在 ios 7 中替换弃用的 sizeWithFont:minFontSIze:actualFontSize

    在 iOS 6 中我使用的是这种方法 self handText sizeWithFont font minFontSize 10 0f actualFontSize maxFontSize forWidth handWidth 2 lin
  • FB 广告 API (#17) 达到用户请求限制

    我正在开发 Facebook 广告 api 来获取帐户营销活动数据 我在这里所做的是获取所有营销活动的列表 并对每个营销活动进行 forloop 获取营销活动统计数据 campaignSets account gt getCampaigns
  • 带参数的热切加载 - laravel

    I have Banks表和单独的表services bank Banks find 1 echo bank gt service 1 print bank with that service serviceId 1 可以通过 servic
  • Popen 在 venv 中创建一个附加进程

    Popen 在中创建一个附加进程venv如果我使用 sys executable 请参阅以下脚本 parent py import time import os import sys import psutil def print proc
  • Ruby 1.9 如何处理源代码中的字符大小写?

    在 Ruby 1 8 及更早版本中 Foo 是一个常量 类 模块或其他常量 然而 foo 是一个变量 主要区别如下 module Foo bar 7 BAZ 8 end Foo BAZ gt 8 Foo bar NoMethodError
  • NodeJS / Express 中的“module.exports”和“exports.methods”是什么意思?

    随机看一下源文件 https github com visionmedia express blob master lib router index js of the express框架NodeJS 有两行代码我不明白 这些代码行是几乎所
  • 理解 dart 中的“!”Bang 操作符

    我在 Stateful 类中声明了一个回调方法 如下所示 final void Function int index onSelected MyBottomNavigationBar required this onSelected 并调用
  • 使用 jQuery 获取字符串的一部分

    HTML 代码 div div 我怎样才能得到号码 45 字符串使用jQuery http en wikipedia org wiki JQuery To 返回末尾的数字id属性 use this attr id match d 上面会返回
  • 如何使用 MockHttpServletRequest 对文件上传进行单元测试?

    我有一个 Spring 3 0 控制器 其方法具有HttpServletRequest作为参数之一 因为它正在处理 多个 文件上传 RequestMapping value classified idClassified dealer id