繁体   English   中英

Spring Test MockMvc 对外部 URL 执行请求

[英]Spring Test MockMvc perform request on external URL

我正在尝试对当前上下文之外的 URL 执行 POST 请求,看起来 Spring 无法理解它。

测试代码:

        String content = mvc
            .perform(post("http://some-external-url.com:8080/somepath)
                    .header("Authorization", authorization)
                    .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                    .param("username", username)
                    .param("password", password)
            .andExpect(status().isOk())
            .andReturn().getResponse().getContentAsString();

在当前上下文中就像一个魅力。 但是根本无法访问远程服务。 似乎忽略了“ http://some-external-url.com:8080 ”部分。

模拟创建代码:

mvc = MockMvcBuilders.webAppContextSetup(context).build();

有没有办法让它工作? 因为使用标准的 Java HttpUrlConnection 类是一个巨大的痛苦。

不。没有办法让 Spring MVC 测试框架与外部服务器(或任何实际服务器)一起工作。

正如Spring 参考手册中所述

Spring MVC 测试框架为使用可与 JUnit、TestNG 或任何其他测试框架一起使用的 fluent API 测试 Spring MVC 代码提供了一流的支持。 它建立在来自 spring-test 模块的 Servlet API 模拟对象上,因此不使用正在运行的 Servlet 容器。

最后一句咒语出来:Spring MVC的测试没有使用正在运行的Servlet容器。 事实上,它不能与正在运行的 Servlet 容器或任何类型的实际服务器(本地或远程)一起使用。

作为替代方案,如果您必须针对外部服务器进行测试,那么您可以考虑在这些特殊情况下使用REST Assured而不是 Spring MVC Test。

您可以使用new RestTemplate().getForObject("http://some-external-url.com:8080/somepath", String.class)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM