测试
使用 Spring 的 STOMP-over-WebSocket 时,有两种主要方法可以测试应用程序 支持。第一种是编写服务器端测试来验证功能 控制器及其带注释的消息处理方法。第二种是写 涉及运行客户端和服务器的完整端到端测试。
这两种方法并不相互排斥。相反,每个都有其位置 在整体测试策略中。服务器端测试更集中,更易于编写 并维护。另一方面,端到端集成测试更完整,并且 测试的次数更多,但它们的编写和维护也更多。
服务器端测试的最简单形式是编写控制器单元测试。然而 这还不够有用,因为控制器的大部分工作都取决于其 附注。纯粹的单元测试根本无法测试这一点。
理想情况下,被测控制器应该像在运行时一样被调用,这与 使用 Spring MVC Test 测试处理 HTTP 请求的控制器的方法 框架 — 也就是说,不运行 Servlet 容器,而是依赖 Spring Framework 调用带注释的控制器。与 Spring MVC Test 一样,您有两个 此处可能的替代方案,要么使用 “context-based” 要么使用 “standalone” 设置:
-
在 Spring TestContext 框架中,inject
clientInboundChannel作为测试字段,以及 使用它来发送要由 Controller 方法处理的消息。 -
手动设置调用 控制器(即
SimpAnnotationMethodMessageHandler) 并传递消息 控制器直接连接到它。
这两个设置场景都在 tests for the stock portfolio 示例应用程序中进行了演示。
第二种方法是创建端到端集成测试。为此,您需要 以嵌入式模式运行 WebSocket 服务器并作为 WebSocket 客户端连接到它 发送包含 STOMP 帧的 WebSocket 消息。 Stock portfolio 示例应用程序的测试也通过使用 Tomcat 作为嵌入式 WebSocket 服务器和一个简单的 STOMP 客户端进行测试。