测试
在使用 Spring 的 STOMP-over-WebSocket 支持时,测试应用程序主要有两种方法。第一种是编写服务器端测试,以验证控制器及其注释的消息处理方法的功能。第二种是编写完整的端到端测试,涉及运行客户端和服务器。
这两种方法并不是相互排斥的。相反,每种方法在整体测试策略中都有其位置。服务器端测试更为专注,且更易于编写和维护。而端到端集成测试则更为全面,测试的内容也更多,但编写和维护起来也更为复杂。
服务器端测试的最简单形式是编写控制器单元测试。然而,这并不够有用,因为控制器所做的许多事情都依赖于其注解。纯粹的单元测试根本无法测试这一点。
理想情况下,待测试的控制器应该像运行时那样被调用,类似于使用 Spring MVC 测试框架测试处理 HTTP 请求的控制器的方法——也就是说,不运行 Servlet 容器,而是依赖 Spring 框架来调用注解的控制器。与 Spring MVC 测试一样,您在这里有两种可能的选择,使用“基于上下文”的设置或使用“独立”的设置:
-
在 Spring TestContext 框架的帮助下加载实际的 Spring 配置,将
clientInboundChannel
注入为测试字段,并使用它发送消息,以便由控制器方法处理。 -
手动设置调用控制器所需的最小 Spring 框架基础设施(即
SimpAnnotationMethodMessageHandler
),并将消息直接传递给控制器。
这两种设置场景在 股票投资组合的测试 示例应用程序中进行了演示。
第二种方法是创建端到端的集成测试。为此,您需要以嵌入模式运行一个 WebSocket 服务器,并作为 WebSocket 客户端连接到它,发送包含 STOMP 帧的 WebSocket 消息。 股票投资组合的测试 示例应用程序也通过使用 Tomcat 作为嵌入式 WebSocket 服务器和一个简单的 STOMP 客户端进行测试来演示这种方法。