|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
测试
使用 Spring 的 STOMP-over-WebSocket 支持时,测试应用程序主要有两种方法。第一种是编写服务器端测试,以验证控制器及其带注解的消息处理方法的功能。第二种是编写完整的端到端测试,涉及同时运行客户端和服务器。
这两种方法并非相互排斥。相反,它们各自在整体测试策略中都占有一席之地。服务器端测试更加聚焦,也更容易编写和维护。另一方面,端到端集成测试则更为全面,覆盖的测试内容更多,但编写和维护起来也更为复杂。
最简单的服务端测试形式是编写控制器单元测试。然而,这种方式并不足够有用,因为控制器的许多行为都依赖于其注解。纯单元测试根本无法对此进行测试。
理想情况下,被测试的控制器应以运行时的方式进行调用,这与使用 Spring MVC Test 框架测试处理 HTTP 请求的控制器的方法非常相似——即无需运行 Servlet 容器,而是依靠 Spring 框架来调用带注解的控制器。与 Spring MVC Test 一样,这里你有两种可选方案:要么使用“基于上下文的”设置,要么使用“独立式”设置:
-
借助 Spring TestContext 框架加载实际的 Spring 配置,将
clientInboundChannel注入为测试字段,并使用它发送消息以由控制器方法处理。 -
手动设置调用控制器所需的最小 Spring 框架基础设施(即
SimpAnnotationMethodMessageHandler),并将控制器的消息直接传递给它。
这两种设置场景都在股票投资组合示例应用程序的测试中进行了演示。
第二种方法是创建端到端的集成测试。为此,你需要以嵌入模式运行一个 WebSocket 服务器,并作为 WebSocket 客户端连接到该服务器,发送包含 STOMP 帧的 WebSocket 消息。 股票投资组合示例应用的测试也通过使用 Tomcat 作为嵌入式 WebSocket 服务器以及一个简单的 STOMP 客户端来进行测试,展示了这种方法。