MockMvc WebAppConfiguration:在 web.xml 中加载 servlet 映射

2023-12-06

我正在使用 MockMvc 编写集成测试,我想知道是否有一种方法可以从 web.xml 加载 servlet 映射(这通常不重要)。

我有一个习惯HandlerInteceptor与请求 URI 匹配(来自HttpServletRequest)针对模板(使用AntPathMatcher).

在 web.xml 中,我像这样定义 servlet 映射(带有相应的 mobile-context.xml):

<servlet-mapping>
    <servlet-name>mobileServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

因此,当控制器定义如下映射时"/operation",确实应该提出请求"/services/operation"。我的定制HandlerInterceptor将 URI 请求与模板进行匹配,例如"/**/services/{operationName}/**".

我的应用程序在 Tomcat 上完美运行。但是,在@ContextConfiguration中,我只能指定mobile-context.xml,因为web.xml不是spring配置文件。因此,MockMvc 只允许我向"/operation"并不是"/services/operation",导致我的HandlerInterceptor抛出异常。

有什么方法可以让 MockMvc 注册 servlet 映射,或者有什么聪明的方法可以解决这个问题吗?提前致谢。

Edit: A 类似的问题这里表明我需要的是不可能的,但我没有更改源代码的权限,所以我无法修改模板或HandlerInterceptor.


我正在使用 MockMvc 和 MockMvc HtmlUnitDriver 来测试应用程序中的导航流程。我遇到了 MockMvc 无法加载我的 javascript 资源的问题,因为我的 servlet 映射是

<url-pattern>/ui/*</url-pattern>

因为我的导航流程是一系列帖子和获取,所以我无法简单地在 MockMvcBuilder 上设置 defaultRequest。我通过创建 MockMvcConfigurer 解决了我的问题:

public class ServletPathConfigurer implements MockMvcConfigurer {

private final String urlPattern;
private final String replacement;


public ServletPathConfigurer(String urlPattern, String replacement) {
    super();
    this.urlPattern = urlPattern;
    this.replacement = replacement;
}

@Override
public RequestPostProcessor beforeMockMvcCreated(
        ConfigurableMockMvcBuilder<?> builder,
        WebApplicationContext context) {

 return new RequestPostProcessor(){

        @Override
        public MockHttpServletRequest postProcessRequest(
                MockHttpServletRequest request) {                        
                 request.setRequestURI(StringUtils.replace(request.getRequestURI(), urlPattern, replacement, 1));
                 request.setServletPath(StringUtils.replace(request.getServletPath(), urlPattern, replacement, 1));
            return request;
        }
    };
}

然后将其添加到我的每个集成测试中:

MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(context)
            .apply(new ServletPathConfigurer("/ui",""))
            .alwaysDo(print())
            .build();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MockMvc WebAppConfiguration:在 web.xml 中加载 servlet 映射 的相关文章

随机推荐

  • Postgresratio_to_report函数

    有人可以告诉我如何安装分析功能 特别是报告比率Postgres 数据库中的函数 我尝试在 postgres 提供的模块中搜索 但没有看到包含该函数的模块 报告比率 RATIO TO REPORT 是一个分析函数 它计算一个值与一组值之和的比
  • 如何通过pip安装MySQL-python?

    venv bin pip install MySQL python Collecting MySQL python Downloading MySQL python 1 2 5 zip 108kB 100 112kB 1 2MB s Com
  • 绘制误差线(百分位数)

    我对 python 很陌生 我需要一些帮助 我想在绘图上绘制相当于 1sigma 标准差的误差条 作为分布的第 16 个和第 84 个百分位值 我尝试过 使用 matplotlib err np std x 但它只是给了我标准差 谢谢 如果
  • 尝试用 PHP 解析 JSON

    我是 php 新手 这确实难倒了我 我正在尝试解析这个 json 以获取值match id result status 1 num results 1 total results 500 results remaining 499 matc
  • 为什么我不能对一个打开的文件调用 read() 两次?

    对于我正在做的练习 我尝试使用以下命令读取给定文件的内容两次read 方法 奇怪的是 当我第二次调用它时 它似乎没有以字符串形式返回文件内容 这是代码 f f open get the year match re search r Popu
  • Ubuntu 16.04 LTS 上的 PCL(点云库)1.7 构建错误

    我将 Ubuntu 版本从 14 04 lts 更新到 16 04 lts 在构建利用点云库的项目时遇到问题 它曾经在 Ubuntu 14 04 上运行良好 我使用 qtcreator 构建我的项目 我收到的警告消息是 警告 usr lib
  • 从向量中提取时使用 NA 作为索引

    在下面的代码中 x lt 1 8 x NA 我期待着一个TRUE or FALSE回答但我有八个NA反而 我发现了is na提供了TRUE FALSE我正在寻找的 但是 我仍然不确定为什么用向量子集NA结果是NA 有什么解释吗 来自索引中的
  • 在列表中查找具有给定属性值的对象,然后查找字典值

    我有一个对象列表 这些对象中的每一个都有一个Name财产 以及ObservablePairCollection这只是一个自定义字典 其工作方式与字典完全相同 具有键 值对 给定两个字符串 一个用于名称 一个用于键 我想找到第一个与给定名称匹
  • 使用 selenium 运行的无头 Chrome

    System setProperty webdriver chrome driver usr bin google chrome final ChromeOptions chromeOptions new ChromeOptions chr
  • 使 tkinter 窗口出现在所有其他窗口之上

    usr bin env python Display window with toDisplayText and timeOut of the window from Tkinter import def showNotification
  • 使用服务帐户凭据的 GDrive 导出失败并显示 404

    我有一个使用 OAuth 客户端从 GDrive 文件导出文本的脚本 效果非常好 import googleapiclient discovery as google from apiclient http import MediaIoBa
  • 在 Python 中复制嵌套列表

    我想复制一个二维列表 这样如果我修改一个列表 另一个列表就不会被修改 对于一维列表 我只是这样做 a 1 2 b a 现在如果我修改b a没有被修改 但这不适用于二维列表 a 1 2 3 4 b a 如果我修改b a也会被修改 我该如何解决
  • 如何从基本控制器中的 OnActionExecuting 重定向?

    我尝试了两种方法 Response Redirect 不执行任何操作 以及调用基本控制器内部的新方法返回 ActionResult 并让它返回 RedirectToAction 这些都不起作用 如何从 OnActionExecuting 方
  • 如何修复“无法加载 TClassName 的单元 UnitName 符号信息。您想尝试自己查找此文件吗?”

    在delphi 中 创建ActiveX 控件曾经比现在更流行 然而 仍然可以使用 Delphi 创建 ActiveX 控件 这个问题假设Delphi 2007 但无论你使用什么Delphi版本 它都应该是相同的 当您创建 ActiveX 控
  • 移动文本模式光标不起作用

    我一直致力于在我目前正在开发的操作系统中移动文本模式光标 我根本无法让它显示出来 这是我用来更新光标的代码 void update cursor unsigned char cursor loc y pos Cols x pos curso
  • 如何确定给定 wxWidgets 中当前字体的字符串的大小

    有没有办法根据 C wxWidgets中当前选择的字体确定给定字符串的显示长度 以像素为单位 例如 如果我打印出字符串 Speed 并希望在 和后面的值之间放置 10 个像素 我需要知道 Speed 字符串有多长 有没有办法确定这一点 我似
  • 带有 Spark 流的多个 writeStream

    我正在使用 Spark Streaming 在尝试实现多个写入流时遇到一些问题 下面是我的代码 DataWriter writeStreamer firstTableData parquet CheckPointConf firstChec
  • Scala 注释实际上是什么? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我不懂Java 开始学习Scala 什么是注释以及它们的用途是什么 注释是附加到类 方法
  • 将 url 参数传递给 swf (flash) 影片

    这里是Flash新手 我正在尝试在浏览器中加载 swf 文件并将 url 参数传递给 flash 影片 如何在actionscript中访问flash电影中的url参数 这是一个示例网址 我确实找到了通过嵌入 对象标签传递参数的指针 但没有
  • MockMvc WebAppConfiguration:在 web.xml 中加载 servlet 映射

    我正在使用 MockMvc 编写集成测试 我想知道是否有一种方法可以从 web xml 加载 servlet 映射 这通常不重要 我有一个习惯HandlerInteceptor与请求 URI 匹配 来自HttpServletRequest