我正在尝试在当前上下文之外的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类是一个巨大的痛苦。
答案 0 :(得分:8)
没有。没有办法让Spring MVC Test Framework与外部服务器(或任何实际的服务器)一起工作。
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)