【发布时间】:2016-04-03 21:12:03
【问题描述】:
我正在尝试对当前上下文之外的 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 类是一个巨大的痛苦。
【问题讨论】:
-
你为什么期望 MockMvc 可以在外部 URL 上工作?
-
为什么不呢?它只是一个测试工具,对吧?首先要正确测试我的控制器,我应该从外部网络服务中获取一些信息。我不认为这是非常罕见的情况。
-
它是一个测试工具,非常具体地模拟了 Servlet 堆栈的一小部分独立的部分。任何地方都没有涉及到 HTTP 客户端,而只是 HTTP 服务器的一部分。你不妨说,既然 Selenium 是一个测试工具,它应该修改数据库架构。
-
请注意,如果您发现问题的其中一个答案可以接受,请随时accept it。
标签: java spring spring-mvc testing spring-test