Получение исключения для тестового класса сервлетов сокетных сокетов - PullRequest
0 голосов
/ 11 мая 2018

Я создал сокет-сервер и клиентский класс и успешно выполняю.При создании тестового класса JUnit для сервера сокета и клиента я получаю любой результат.Я предполагаю, что он ожидает запроса клиента, но после создания клиента он также не выполняется.

Класс сервера в

PrimaryKeyValueStore.java

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Collections;
import java.util.Set;

import college.Student;

public class PrimaryKeyValueStore {

    private InMemoryCache inMemoryCache;

    public PrimaryKeyValueStore() {
        inMemoryCache=new InMemoryCache();
    }

    public void startServer(int port) {

        ServerSocket serverSocket=null;
        ObjectInputStream inputStreamFromClient=null;
        Socket clientSocket=null;

        try {
            serverSocket=new ServerSocket(port);
            while (true) {
                clientSocket=serverSocket.accept();

                inputStreamFromClient=new ObjectInputStream(clientSocket.getInputStream());
                Student student=(Student) inputStreamFromClient.readObject();

                switch(student.getRestMethod()) {

                case "PUT": inMemoryCache.put(student.getUserName(),student);
                new Thread(new PrimaryKeyValueStoreClient(clientSocket,Collections.EMPTY_SET)).start();
                break;

                case "GET": new Thread(new PrimaryKeyValueStoreClient(clientSocket,inMemoryCache.get(student.getUserName()))).start();
                break;

                case "DELETE": Set<Student> setStudent=inMemoryCache.get(student.getUserName());
                inMemoryCache.delete(student.getUserName());

                new Thread(new PrimaryKeyValueStoreClient(clientSocket,setStudent)).start();
                break;

                case "GETALL": new Thread(new PrimaryKeyValueStoreClient(clientSocket,inMemoryCache.getAll())).start();
                break;

                }
            }
        }
        catch (Exception e) {
            System.err.println("Server Error :: "+e.getMessage());
            System.err.println("Localized :: "+e.getLocalizedMessage());
            System.err.println("Stack Trace :: "+e.getStackTrace());
            System.err.println("To String :: "+e.toString());
        }finally {
            if(inputStreamFromClient!=null) {
                try {
                    inputStreamFromClient.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }
            if(serverSocket!=null) {
                try {
                    serverSocket.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

и класс клиента был

CollegeClient.java

public class CollegeClient {

    private static final String SOCKET_IP="127.0.0.1";

    public Set<Student> sendMessage(Student student, int port) {

        Socket clientSocket=null;
        ObjectOutputStream outToServer=null;
        ObjectInputStream fromServer=null;

        try {
            clientSocket=new Socket(SOCKET_IP, port);   
            outToServer=new ObjectOutputStream(clientSocket.getOutputStream());
            outToServer.writeObject(student);

            fromServer=new ObjectInputStream(clientSocket.getInputStream());
            Set<Student> employeeSet=(Set<Student>) fromServer.readObject();

            return employeeSet;
        }catch(Exception e) {
            System.err.println("Client Error :: "+e.getMessage());
            System.err.println("Localized :: "+e.getLocalizedMessage());
            System.err.println("Stack Trace :: "+e.getStackTrace());
        }finally {
            if(clientSocket!=null) {
                try {
                    clientSocket.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }
            if(fromServer!=null) {
                try {
                    fromServer.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }
            if(outToServer!=null) {
                try {
                    outToServer.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}

, и мой тестовый класс был

public class CollegeClientTest {

    private CollegeClient collegeClient;
    private PrimaryKeyValueStore primaryKeyValueStore;

    @Before
    public void setUp() {
        collegeClient = new CollegeClient();
        primaryKeyValueStore=new PrimaryKeyValueStore();
    }

    @Before
    public void serverStart() {
        primaryKeyValueStore.startServer(9000);
    }

    @Test
    public void sendMessage() {

        int port=9000;
        Student student=new Student();
        student.setUserName("a");
        student.setFirstName("aa");
        student.setLastName("aaa");
        student.setAge(1);
        student.setMark(100);
        student.setRestMethod("GET");
        Set<Student> employeeSet=collegeClient.sendMessage(student, port);
        System.out.println("===>> "+employeeSet);
    }

}

, и результат был,

enter image description here

Может кто-нибудь помочь решить эту проблему.

1 Ответ

0 голосов
/ 11 мая 2018

Вы использовали метод 2 @Before в своем тесте.Junit не гарантирует порядок выполнения, если объявлено несколько @Before методов.Может быть шанс, что ваш метод, который запускает сервер, вызывается до того, как клиент инициализируется сам.

Более того, вам не нужно инициализировать ваши классы (CollegeClient, PrimaryKeyValueStore) в методе настройки, это можно сделать во время объявления самого себя.

Попробуйте инициализировать классы во время объявления только одного @Before чтобы запустить сервер, а затем запустить тестовый набор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...