測試
當使用 Spring 的 STOMP-over-WebSocket 支援時,測試應用主要有兩種方法。第一種是編寫伺服器端測試來驗證控制器及其註解的訊息處理方法的功能。第二種是編寫完整的端到端測試,其中包括執行客戶端和伺服器。
這兩種方法並非互斥。相反,每種方法在整體測試策略中都有其作用。伺服器端測試更集中,更容易編寫和維護。另一方面,端到端整合測試更完整,測試範圍更廣,但也更復雜,維護起來也更費力。
伺服器端測試最簡單的形式是編寫控制器單元測試。然而,這還不夠有用,因為控制器的大部分功能依賴於其註解。純粹的單元測試無法測試這一點。
理想情況下,應該像執行時那樣呼叫被測試的控制器,這與使用 Spring MVC Test 框架測試處理 HTTP 請求的控制器方法非常相似——即不執行 Servlet 容器,而是依賴 Spring Framework 呼叫帶註解的控制器。與 Spring MVC Test 一樣,這裡有兩種可能的替代方案,可以使用“基於上下文”或使用“獨立”設定
-
藉助 Spring TestContext 框架載入實際的 Spring 配置,將
clientInboundChannel
作為測試欄位注入,並使用它傳送訊息,以便由控制器方法處理。 -
手動設定呼叫控制器所需的最低 Spring Framework 基礎設施(即
SimpAnnotationMethodMessageHandler
),並將控制器的訊息直接傳遞給它。
這兩種設定場景都在股票投資組合的測試示例應用中得到演示。
第二種方法是建立端到端整合測試。為此,您需要以嵌入模式執行 WebSocket 伺服器,並作為 WebSocket 客戶端連線到它,該客戶端傳送包含 STOMP 幀的 WebSocket 訊息。股票投資組合的測試示例應用也演示了這種方法,其中使用 Tomcat 作為嵌入式 WebSocket 伺服器,並使用一個簡單的 STOMP 客戶端進行測試。