2

I know how to test websocket, like use WebSocketKing or Postman(2021/5/20), and it works good

I have no idea about writing websocket in unit test

usually, I use "SpringJUnit4ClassRunner" and "@WebAppConfiguration" to mock my service and test my controller

but how to create a mock websocket server to test my websocket in unit test?

Can I use the way like my SimpleControllerTest to create a mock webSocket server?

if I can , How to do it?

and sorry about my bad English , thanks all

Environmen
Java : 1.8
Server : Tomcat 8.5
Test : Junit 4
Socket : javax.websocket.jar
Framework : Spring MVC

My Simple WebSocket Code

package com.ws.socket;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint(value = "/MyEndpoint")
public class Socket {

    private SocketConnection socketConnection;

    @OnOpen
    public void onOpen(Session session) {
        socketConnection = new SocketConnectionImpl(session);
        socketConnection.onOpen(session.getId());
    }

    @OnClose
    public void onClose(Session session) {
        socketConnection.onClose(session.getId());
    }

    @OnMessage
    public void onMessage(Session session, String msg) throws IOException {
        socketConnection.onMessage(session, msg);
    }

    @OnError
    public void onError(Session session, Throwable error) {
        socketConnection.onError(session.getId(), error);
    }
}

public abstract class SocketConnection {

    protected SocketConnection(Session session) {
    }

    protected void onOpen(String sessionId) {
        System.out.println(sessionId + " build websocket connection !");
    }

    protected void onClose(String sessionId) {
        System.out.println(sessionId + " close connection !");
    }

    protected void onMessage(Session session, String msg) throws IOException {
        System.out.println(session.getId() + " say : " + msg);
        session.getBasicRemote().sendText(" already receive msg about your say " + msg);
    }

    protected void onError(String sessionId, Throwable error) {
        System.out.println(sessionId + " get error , message = " + error.getMessage());
    }
}

My Simple Test Controller

package com.ws.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SimpleController {

    @GetMapping("/test")
    public String testService() {
        return "start success!";
    }
}

My Simple Controller Test

package com.ws.controller;

import com.ws.config.ServletConfig;
import com.ws.config.SpringConfig;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

@WebAppConfiguration
@ContextConfiguration(classes = {ServletConfig.class, SpringConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class SimpleControllerTest {
    @Autowired
    WebApplicationContext webApplicationContext;

    MockMvc mvc;

    @Before
    public void init() {
        mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .build();
    }

    @Test
    public void testAPI() throws Exception {
        String result = mvc.perform(get("/test")).andReturn().getResponse().getContentAsString();
        Assert.assertEquals("start success!", result);
    }
}

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.