我正在尝试在当前上下文之外的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 Test框架提供了一流的支持,可以使用可以与JUnit,TestNG或任何其他测试框架一起使用的流畅API来测试Spring MVC代码.它建立在spring-test模块的Servlet API模拟对象之上,因此不使用正在运行的Servlet容器.
最后一句咒语出来:Spring MVC的测试并没有使用一个运行Servlet容器.实际上,它不能与正在运行的Servlet容器或任何类型的实际服务器(本地或远程)一起使用.
作为替代方案,如果你必须测试针对外部服务器上,然后你可以考虑使用放心,而不是Spring MVC的测试对于那些特殊情况.