Spring Test MockMvc对外部URL执行请求

时间:2015-12-29 22:46:38

标签: java spring spring-mvc testing spring-test

我正在尝试在当前上下文之外的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类是一个巨大的痛苦。

2 个答案:

答案 0 :(得分:8)

没有。没有办法让Spring MVC Test Framework与外部服务器(或任何实际的服务器)一起工作。

Spring Reference Manual中所述,

  

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

最后一句话说明了:Spring MVC Test 使用正在运行的Servlet容器。实际上,它不能与正在运行的Servlet容器或任何类型的实际服务器(本地或远程)一起使用。

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

答案 1 :(得分:0)

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