Testing

  • 服务器端测试:专注于验证控制器和已注释的消息处理方法,使用 Spring TestContext 框架或手动设置 Spring 框架来调用控制器。

  • 端到端集成测试:更全面,运行 WebSocket 服务器和客户端并发送 STOMP 消息,以测试应用程序的完整行为。

在你使用Spring的STOMP-over-WebSocket支持时,有两种主要的测试应用程序的方法。首先是编写服务器端测试来验证控制器及其带注释的消息处理方法的功能。第二是编写涉及运行客户端和服务器的完整的端到端测试。

这两种方法并不相互排斥。恰好相反,每种方法在整个测试策略中都占有一席之地。服务端测试更集中,更容易编写和维护。另一方面,端到端集成测试更完整,测试内容更多,但编写和维护起来也更复杂。

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

理想情况下,要测试的控制器应该在运行时被调用,这与通过使用 Spring MVC Test 框架来测试处理 HTTP 请求的控制器的做法非常相似——也就是说,不运行 Servlet 容器,而依靠 Spring 框架来调用注释的控制器。与 Spring MVC Test 一样,这里有两种可能的替代方案,一种是使用 “基于上下文的” 设置,另一种是使用 “独立的” 设置:

  • 在 Spring TestContext 框架的帮助下加载实际的 Spring 配置,注入 `clientInboundChannel`作为测试字段,并使用它向控制器方法发送要处理的消息。

  • 手动设置调用控制器(即 SimpAnnotationMethodMessageHandler)所需的最小 Spring 框架基础结构,并直接向其传递控制器消息。

上述两种安装方案都展示在 tests for the stock portfolio样例应用程序中。

第二种方法是创建端到端集成测试。为此,你需要以嵌入式模式运行 WebSocket 服务器,并以发送包含 STOMP 帧的 WebSocket 消息的 WebSocket 客户端形式连接到它。 tests for the stock portfolio示例应用程序还使用 Tomcat 作为嵌入式 WebSocket 服务器和一个简单的 STOMP 客户端进行测试来演示此方法。