测试

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

这两种方法并非互斥。相反,每种方法在整体测试策略中都有其作用。服务器端测试更集中,更容易编写和维护。另一方面,端到端集成测试更完整,测试范围更广,但也更复杂,维护起来也更费力。

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

理想情况下,应该像运行时那样调用被测试的控制器,这与使用 Spring MVC Test 框架测试处理 HTTP 请求的控制器方法非常相似——即不运行 Servlet 容器,而是依赖 Spring Framework 调用带注解的控制器。与 Spring MVC Test 一样,这里有两种可能的替代方案,可以使用“基于上下文”或使用“独立”设置

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

  • 手动设置调用控制器所需的最低 Spring Framework 基础设施(即 SimpAnnotationMethodMessageHandler),并将控制器的消息直接传递给它。

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

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