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