Spring 测试 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 class 是一个巨大的痛苦。
没有。无法使 Spring MVC 测试框架与外部服务器(或与此相关的任何实际服务器)一起工作。
中所述
The Spring MVC Test framework provides first class support for testing
Spring MVC code using a fluent API that can be used with JUnit,
TestNG, or any other testing framework. It’s built on the Servlet API
mock objects from the spring-test module and hence does not use a
running Servlet container.
最后一句话说得很清楚:Spring MVC 测试不 使用运行 Servlet 容器。事实上,它不能与 运行 Servlet 容器或任何类型的实际服务器(本地或远程)一起使用。
作为替代方案,如果您必须针对外部服务器进行测试,那么您可以考虑使用REST Assured而不是Spring MVC 测试那些特殊的案例。
您可以使用new RestTemplate().getForObject("http://some-external-url.com:8080/somepath", String.class)
我正在尝试在当前上下文之外对 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 class 是一个巨大的痛苦。
没有。无法使 Spring MVC 测试框架与外部服务器(或与此相关的任何实际服务器)一起工作。
中所述The Spring MVC Test framework provides first class support for testing Spring MVC code using a fluent API that can be used with JUnit, TestNG, or any other testing framework. It’s built on the Servlet API mock objects from the spring-test module and hence does not use a running Servlet container.
最后一句话说得很清楚:Spring MVC 测试不 使用运行 Servlet 容器。事实上,它不能与 运行 Servlet 容器或任何类型的实际服务器(本地或远程)一起使用。
作为替代方案,如果您必须针对外部服务器进行测试,那么您可以考虑使用REST Assured而不是Spring MVC 测试那些特殊的案例。
您可以使用new RestTemplate().getForObject("http://some-external-url.com:8080/somepath", String.class)