簡體   English   中英

Spring Test 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 類是一個巨大的痛苦。

不。沒有辦法讓 Spring MVC 測試框架與外部服務器(或任何實際服務器)一起工作。

正如Spring 參考手冊中所述

Spring MVC 測試框架為使用可與 JUnit、TestNG 或任何其他測試框架一起使用的 fluent API 測試 Spring MVC 代碼提供了一流的支持。 它建立在來自 spring-test 模塊的 Servlet API 模擬對象上,因此不使用正在運行的 Servlet 容器。

最后一句咒語出來:Spring MVC的測試沒有使用正在運行的Servlet容器。 事實上,它不能與正在運行的 Servlet 容器或任何類型的實際服務器(本地或遠程)一起使用。

作為替代方案,如果您必須針對外部服務器進行測試,那么您可以考慮在這些特殊情況下使用REST Assured而不是 Spring MVC Test。

您可以使用new RestTemplate().getForObject("http://some-external-url.com:8080/somepath", String.class)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM