【问题标题】:mockmvc Load Redirect URLmockmvc 加载重定向 URL
【发布时间】:2017-03-06 15:32:31
【问题描述】:

我正在为 Spring Rest 服务编写测试,该服务将 url 重定向到另一个 spring 服务。所以目标是使用书签名称找到书签。第一个服务使用 Bookmark 名称获取 BookmarkId,然后重定向 url 以根据 BookmarkId 加载对象

我可以很容易地测试 url 重定向使用,下面的工作正常

 mockMvc.perform(get("/bookmarks/name/" + "sample"))
                .andExpect(status().isMovedPermanently()).andExpect(redirectedUrl("/bookmarks/" + bookmark.getKey()));

我想要做下一步并调用下一个 url 并加载书签对象,我该怎么做??

【问题讨论】:

    标签: spring spring-test-mvc


    【解决方案1】:

    只需做网络浏览器会做的事情 - 通过请求您在 Location 标头中获得的 URL 来遵循重定向:

    mockMvc.perform(get("/bookmarks/" + bookmark.getKey())).andExpect(...)
    

    不过,这是一个单独的测试用例。所以一个 TC 应该测试你是否真的被重定向,另一个测试 bookmarks/{id} 端点。

    编辑(2017 年 6 月 13 日)

    Spring Framework 的 bugtracker 中有一个功能请求,允许 MockMVC 跟踪重定向 (SPR-14342 Improve MockMvc to follow redirects and forwards)。它在今年年初被拒绝,但有以下评论:

    解析为“不会修复”,因为对转发的一般支持远远超出了 MockHttpServletRequest 的范围。考虑直接针对转发的 URL 进行测试,并按照转发点的预期设置请求。

    【讨论】:

    • 是的,我已经这样做了,想知道这两个步骤是否可以合并为一个
    • 目前使用 MockMvc 是不可能的。正在考虑允许MockMvc 跟随重定向:SPR-14342。现在你可以使用MockMvcWebConnection。请注意,这是一个完全不同的 API。如果我找到一分钟,我会用一个例子更新我的答案。
    • 很遗憾,这不是受支持的用例。如果唯一的解决方案是直接点击转发的 URL(想想会话 ID),那么简单的“验证然后重定向”流程所需的设置工作量会显着增加。
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 2013-08-16
    • 1970-01-01
    • 2018-01-14
    • 2017-06-27
    • 1970-01-01
    • 2021-09-17
    • 2014-04-14
    相关资源
    最近更新 更多