Spring Test MockMvc对外部URL执行请求

Mik*_*kov 8 java testing spring spring-mvc 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();
Run Code Online (Sandbox Code Playgroud)

就当前背景下的魅力而言.但是根本无法达到远程服务.似乎" http://some-external-url.com:8080 "部分被忽略了.

模拟创建代码:

mvc = MockMvcBuilders.webAppContextSetup(context).build();
Run Code Online (Sandbox Code Playgroud)

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

Sam*_*nen 10

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

Spring参考手册中所述,

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

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

作为替代方案,如果你必须测试针对外部服务器上,然后你可以考虑使用放心,而不是Spring MVC的测试对于那些特殊情况.

  • 仅供参考:我添加了关于REST Assured的说明. (3认同)