91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么創建WebTestClient

發布時間:2021-12-22 11:56:53 來源:億速云 閱讀:161 作者:iii 欄目:大數據

本篇內容介紹了“怎么創建WebTestClient”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

WebTestClient

WebTestClient是圍繞WebClient的薄殼,可用于執行請求并公開專用的流利API來驗證響應。 WebTestClient通過使用模擬請求和響應綁定到WebFlux應用程序,或者它可以通過HTTP連接測試任何Web服務器

3.7.1 安裝

要創建WebTestClient,必須選擇多個服務器設置選項之一。實際上,你是在配置WebFlux應用程序以綁定到該URL,還是使用URL連接到正在運行的服務器。

綁定到控制器

以下示例顯示如何創建服務器設置以一次測試一個@Controller

client = WebTestClient.bindToController(new TestController()).build();

前面的示例加載WebFlux Java配置并注冊給定的控制器。使用模擬請求和響應對象,可以在沒有HTTP服務器的情況下測試生成的WebFlux應用程序。構建器上有更多方法可以定制默認WebFlux Java配置。

綁定到路由器功能

以下示例顯示了如何通過RouterFunction設置服務器:

RouterFunction<?> route = ...
client = WebTestClient.bindToRouterFunction(route).build();

在內部,配置被傳遞到RouterFunctions.toWebHandler。使用模擬請求和響應對象,可以在沒有HTTP服務器的情況下測試生成的WebFlux應用程序。

綁定到ApplicationContext

以下示例顯示了如何通過應用程序或其部分子集的Spring配置來設置服務器:

@SpringJUnitConfig(WebConfig.class) //1
class MyTests {

    WebTestClient client;

    @BeforeEach
    void setUp(ApplicationContext context) {  //2
        client = WebTestClient.bindToApplicationContext(context).build(); //3
    }
}
  1. 指定要加載的配置

  2. 注入配置

  3. 創建WebTestClient

在內部,配置被傳遞到WebHttpHandlerBuilder以建立請求處理鏈。有關更多詳細信息,請參見WebHandler API。使用模擬請求和響應對象,可以在沒有HTTP服務器的情況下測試生成的WebFlux應用程序。

綁定到服務器

以下服務器設置選項使你可以連接到正在運行的服務器:

client = WebTestClient.bindToServer().baseUrl("http://localhost:8080").build();

客戶端構建者

除了前面介紹的服務器設置選項之外,你還可以配置客戶端選項、包括基本URL、默認標頭,客戶端過濾器等。這些選項在bindToServer之后很容易獲得。對于所有其他服務器,你需要使用configureClient()從服務器配置過渡到客戶端配置,如下所示:

client = WebTestClient.bindToController(new TestController())
        .configureClient()
        .baseUrl("/test")
        .build();

3.7.2 寫測試

WebTestClient提供了與WebClient相同的API,直到使用exchange()執行請求為止。 exchange()之后是鏈接的API工作流,用于驗證響應。

通常,首先聲明響應狀態和標頭,如下所示:

client.get().uri("/persons/1")
            .accept(MediaType.APPLICATION_JSON)
            .exchange()
            .expectStatus().isOk()
            .expectHeader().contentType(MediaType.APPLICATION_JSON)

然后,你指定如何解碼和使用響應主體:

  • ExpectBody(Class <T>):解碼為單個對象。

  • ExpectBodyList(Class <T>):解碼并將對象收集到List <T>

  • ExpectBody():解碼為byte []以獲取JSON內容或一個空的正文。

然后,你可以為主體使用內置的斷言。以下示例顯示了一種方法:

client.get().uri("/persons")
        .exchange()
        .expectStatus().isOk()
        .expectBodyList(Person.class).hasSize(3).contains(person);

你還可以超越內置的斷言并創建自己的斷言,如以下示例所示:

import org.springframework.test.web.reactive.server.expectBody

client.get().uri("/persons/1")
        .exchange()
        .expectStatus().isOk()
        .expectBody(Person.class)
        .consumeWith(result -> {
            // custom assertions (e.g. AssertJ)...
        });

你還可以退出工作流程并獲得結果,如下所示:

EntityExchangeResult<Person> result = client.get().uri("/persons/1")
        .exchange()
        .expectStatus().isOk()
        .expectBody(Person.class)
        .returnResult();

當你需要使用泛型解碼為目標類型時,請尋找接受ParameterizedTypeReference而不是Class <T>的重載方法。

無內容

如果響應沒有內容(或者你不在乎),請使用Void.class,以確保釋放資源。以下示例顯示了如何執行此操作:

client.get().uri("/persons/123")
        .exchange()
        .expectStatus().isNotFound()
        .expectBody(Void.class);

或者,如果要斷言沒有響應內容,則可以使用類似于以下內容的代碼:

client.post().uri("/persons")
        .body(personMono, Person.class)
        .exchange()
        .expectStatus().isCreated()
        .expectBody().isEmpty();

JSON內容

當你使用ExpectBody()時,響應以byte[]的形式使用。這對于原始內容聲明很有用。例如,你可以使用JSONAssert來驗證JSON內容,如下所示:

client.get().uri("/persons/1")
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .json("{\"name\":\"Jane\"}")

你還可以使用JSONPath表達式,如下所示:

client.get().uri("/persons")
        .exchange()
        .expectStatus().isOk()
        .expectBody()
        .jsonPath("$[0].name").isEqualTo("Jane")
        .jsonPath("$[1].name").isEqualTo("Jason");

流式響應

要測試無限流(例如,“ text/event-stream”或“ application/stream + json”),你需要在響應狀態和響應頭斷言之后立即退出鏈接的API(通過使用returnResult),如下所示示例顯示:

FluxExchangeResult<MyEvent> result = client.get().uri("/events")
        .accept(TEXT_EVENT_STREAM)
        .exchange()
        .expectStatus().isOk()
        .returnResult(MyEvent.class);

現在,你可以使用Flux <T>,在到達解碼對象時對其進行斷言,然后在達到測試目標時在某個時候取消。我們建議使用反應堆測試模塊中的StepVerifier進行此操作,如以下示例所示:

Flux<Event> eventFlux = result.getResponseBody();

StepVerifier.create(eventFlux)
        .expectNext(person)
        .expectNextCount(4)
        .consumeNextWith(p -> ...)
        .thenCancel()
        .verify();

請求體

當涉及到構建請求時,WebTestClient提供了與WebClient相同的API,實現主要是簡單的傳遞。

“怎么創建WebTestClient”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪洞县| 达州市| 阳信县| 平凉市| 孟村| 云阳县| 新余市| 正蓝旗| 盐源县| 福安市| 普格县| 扎赉特旗| 贵州省| 盐山县| 宁阳县| 文山县| 大田县| 威远县| 阿鲁科尔沁旗| 庆阳市| 乌兰县| 焉耆| 财经| 永清县| 海安县| 揭西县| 巴南区| 隆德县| 留坝县| 武鸣县| 西林县| 桐城市| 南皮县| 华容县| 阳高县| 台北县| 平阴县| 永胜县| 阳谷县| 喀什市| 全南县|