测试
当您使用 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 客户端用于测试目的来演示这种方法。