2017-02-03 49 views
1

Websocket/SockJS/Stompサーバーのエンドポイントを公開し、クライアント(Java STOMPクライアント、またSpringからも)を実行するJUnitテストを実行するアプリがあります。 "送信"機能をテストします。WebSocketへの自己接続JUnitテストからのSpringサーバー

Iは

public void measureSpeedWithWebsocket() throws Exception { 
    final Waiter subscribeWaiter = new Waiter(); 

    new Thread(() -> { 
     // Prepare connection 
     WebsocketClient listener = new WebsocketClient("/mytopic/stomp"); 
     try { 
      listener.connectAndSubscribe(); 
      subscribeWaiter.resume(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }).start(); 
    subscribeWaiter.await(); // Wait for connection. 

ようなテストは、ここで私は効果()は二次スレッドコール再開までの試験のメインスレッドを遅延させるために基本的になる、https://github.com/jhalterman/concurrentunitからウェイターを使用してきました。コンテキストで実行されている春のサーバーは、私は次のエラーを取得しています

を反応させることがあるためこれは、おそらく間違っている私は、おそらく適切なテストを行うことができますどのように

[INFO ] 2017-02-03 12:36:12.402 [Thread-19] WebsocketClient - Listening 
[INFO ] 2017-02-03 12:36:12.403 [Thread-19] WebsocketClient - Connecting to ws://localhost:8083/user... 
2017-02-03 12:36:14.097 ERROR 9956 --- [  Thread-19] o.s.w.socket.sockjs.client.SockJsClient : Initial SockJS "Info" request to server failed, url=ws://localhost:8083/user 
    org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:8083/user/info": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:633) ~[spring-web-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595) ~[spring-web-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.socket.sockjs.client.RestTemplateXhrTransport.executeInfoRequestInternal(RestTemplateXhrTransport.java:138) ~[spring-websocket-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.socket.sockjs.client.AbstractXhrTransport.executeInfoRequest(AbstractXhrTransport.java:155) ~[spring-websocket-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.socket.sockjs.client.SockJsClient.getServerInfo(SockJsClient.java:286) ~[spring-websocket-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.socket.sockjs.client.SockJsClient.doHandshake(SockJsClient.java:254) ~[spring-websocket-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:274) [spring-websocket-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.web.socket.messaging.WebSocketStompClient.connect(WebSocketStompClient.java:255) [spring-websocket-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    (...) 
    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_74] 
Caused by: java.net.ConnectException: Connection refused: connect 

その「自己コネクト」私のSpring Bootアプリケーションが提供するwebsocketに?

+1

テストで '@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)'のようなものを使用している場合は、実際に正しいポートを使用していることを確認してください。あなたのログのエラーメッセージは、あなたがURIにポートをハードコーディングしたことを示唆しています(数字は^^のように見えます)。ポートが正しくない場合は、スタックトレースを取得します。 Springはポートを発見する手段を提供しています。[here](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-discover-the-http-port-at-ランタイム)。 – Fencer

答えて

2

あなたが幸運な人よりも春のブートを使用している場合:)。 ここでは、http://rafaelhz.github.io/testing-websockets/のWebソケットをテストする方法を示します。これはSpring Bootで完全に機能し、多くのことに役立ちます。私はSpring MVCでも同じことをしようとしていますが、残念ながらSpring MVCでは動作しません。

関連する問題