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