测试

当你使用 Spring 的 STOMP-over-WebSocket 支持时,有两种主要的应用程序测试方法。 第一种是编写服务器端测试,以验证控制器及其带注解的消息处理方法的功能。 第二种是编写涉及运行客户端和服务器的完整端到端测试。

这两种方法并非相互排斥。相反,它们在整体测试策略中各司其职。 服务器端测试更具针对性,更易于编写和维护。 另一方面,端到端集成测试更完整,测试内容也更多,但编写和维护也更复杂。

最简单的服务器端测试形式是编写控制器单元测试。然而,这不够有用, 因为控制器的大部分功能都依赖于其注解。纯粹的单元测试根本无法测试这一点。

理想情况下,被测控制器应像运行时一样被调用,这与使用 Spring MVC Test 框架测试处理 HTTP 请求的控制器的方法非常相似——也就是说,无需运行 Servlet 容器, 而是依靠 Spring 框架来调用带注解的控制器。与 Spring MVC Test 一样, 这里有两种可能的替代方案,即使用"`context-based`"(基于上下文)或使用"`standalone`"(独立)设置:

  • 借助 Spring TestContext 框架加载实际的 Spring 配置,将 clientInboundChannel 注入为测试字段,并使用它发送消息,以便由控制器方法处理。

  • 手动设置调用控制器所需的最小 Spring 框架基础设施(即 SimpAnnotationMethodMessageHandler), 并直接将消息传递给它以供控制器处理。

这两种设置场景都在 股票投资组合示例应用程序的测试 中得到了演示。

第二种方法是创建端到端集成测试。为此,你需要以嵌入模式运行 WebSocket 服务器, 并作为 WebSocket 客户端连接到它,该客户端发送包含 STOMP 帧的 WebSocket 消息。 股票投资组合示例应用程序的测试 也演示了这种方法,它使用 Tomcat 作为嵌入式 WebSocket 服务器,并使用一个简单的 STOMP 客户端进行测试。