我不明白在springboot应用程序中如何正确地编写websocket测试用例。我有一个实现WebSocketHandler
的类,我在WebSocketConfigurer
中添加了这个处理程序:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(logWebSocketHandler() , "/test")
.addInterceptors(new HttpSessionHandshakeInterceptor())
.setAllowedOrigins("*");
}
@Bean
public LogWebSocketHandler logWebSocketHandler(){
return new LogWebSocketHandler();
}
}
但是当我写下下面的测试用例时,我得到了一个例外:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration({App.class})
@WebAppConfiguration
public class LogsControllerTest {
private WebSocketContainer container;
@Before
public void setup() {
container = ContainerProvider.getWebSocketContainer();
}
@Test
public void testGetLog() throws Exception {
Session session = container.connectToServer(new TestEndpoint(),
URI.create("ws://127.0.0.1:8080/test"));
}
}
异常:javax.websocket.部署异常
:发起WebSocket连接的HTTP请求失败
如果我将ws://127.0设置为。0.1:8080/test/
(结尾斜杠)它可以工作,但不工作。
我做错了什么?
我找到了解决方案:
添加注释@WebIntegrationTest(value=8080)
或者您可以指定randomPort=true
在此之后加上:
@ClientEndpoint
public class TestWebSocketClient {
Session session;
@OnOpen
public void onOpen(final Session session){
this.session = session;
}
}
在测试的主体:
@Autowired
private LogWebSocketHandler socketHandler;
private WebSocketContainer container;
private TestWebSocketClient client;
@Before
public void setup() {
container = ContainerProvider.getWebSocketContainer();
client = new TestWebSocketClient();
}
@Test
public void createSessionAfterOpenLogWebSocketHandler() throws Exception {
container.connectToServer(client , URI.create("ws://localhost:8080/path"));
while( !socketHandler.isOpen()){
// sometime it is doesn't work, but I dont know solution of this problem
// wait until socket is open
}
Assert.assertTrue( socketHandler.isOpen() );
}
我有一个Spring Boot应用程序依赖于谷歌PubSub。我想用谷歌云PubSub模拟器运行它。如何解析,以便应用程序启动并使用来自本地模拟器而不是外部项目的消息? 目前,如果我将GOOGLE_APPLICATION_CREDENTIALS设置为dev.json,则不会调用PubSub,如果我不设置变量,则测试崩溃。我怎样才能克服它?我不会拼图。 注意:我正在编写一个完整的Spring boo
有一个Spring应用程序“A”打包为JAR(带有maven),应用程序“A”的POM文件包含一些定义的特定maven依赖项。 在另一个打包为JAR的spring boot应用程序“B”中,添加了应用程序“A”的依赖项,但在执行“B”时,它对应用程序“A”中提到的依赖项抛出了几个ClassNotFound/NoClassDef错误。 注意-应用程序“A”不是一个引导项目。这是一个简单的用maven
我知道Spring Boot应用程序可以作为war文件部署到生产环境中。但是部署spring boot应用程序的典型方式是什么?它只需要jvm而不需要容器吗?
我有一个简单的Spring Boot Application结构,如下所示 pplication.java注释为 SpringConfig。java用@Configuration注释,并有一个返回DBService新实例的方法。该方法用@Bean注释 DBService类中包含了自动加载的存储库。这些存储库来自另一个项目依赖项,并提供到RDBMS/数据存储的连接。 我在applicationCon
以下是我的场景。 我有我的应用程序,它构建在带有嵌入式tomcat服务器的Spring Boot上。在我的应用程序中,我有单元测试和集成测试。 首先,我想将我的应用程序构建为一个maven包(jar ),它将覆盖所有的单元测试,然后下一步是将jar文件作为spring boot application运行((java -jar myapplication.jar ),它将启动tomcat服务器。最
设置是,我希望有一个正在运行的应用程序,然后使用@Value注释中的URL运行集成测试。我的测试类使用Rest Assured并如下所示: 我的build.gradle文件如下所示: