Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Design, Quality, Testing > Как сделать jUnit-тест для Sockets-соединения???


Автор: Killer_13 26.4.2012, 19:56
Собственно вопрос понятен из темы.
Есть клиент и сервер - нужно протестировать с помощью jUnit Socket-соединение, ну или если у кого есть другие примеры то все-равно с помощью чего, главное понять принцип как это сделать.

В инете нашел материал, но что-то под свой пример заточить не смог.

Спасибо за подсказки.

Client
Код

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

    public static void main(String[] args) throws UnknownHostException,
            IOException {
        new Client();
    }

    private Socket clientSocket;
    private InputStream inputStream;
    private OutputStream outputStream;

    private DataInputStream dataInputStream;
    private DataOutputStream dataOutputStream;

    private final String hostName = "localhost";
    private final int PORT = 6700;

    private BufferedReader bufReader;
    private String requestMessage = null;
    private String responseMessage = null;

    public Client() {
        System.out.println("-CLIENT-");

        try {
            this.clientSocket = new Socket(this.hostName, this.PORT);
            this.bufReader = new BufferedReader(
                    new InputStreamReader(System.in));

            this.inputStream = clientSocket.getInputStream();
            this.outputStream = clientSocket.getOutputStream();

            this.dataInputStream = new DataInputStream(inputStream);
            this.dataOutputStream = new DataOutputStream(outputStream);

            do {
                this.requestMessage = bufReader.readLine();
                sendMessage(this.requestMessage);
                this.responseMessage = dataInputStream.readUTF();
                System.out.println(this.responseMessage);
            } while ((!(this.requestMessage.compareTo("quit") == 0)));
            System.out.println("ClientStopped!");

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                this.inputStream.close();
                this.outputStream.close();
                this.clientSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private void sendMessage(String msg) {
        try {

            this.dataOutputStream.writeUTF(msg);
            this.dataOutputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



Server
Код
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) throws IOException {
        new Server();
    }

    private ServerSocket serverSocket;
    private Socket connectionSocket;

    private InputStream inputStream;
    private OutputStream outputStream;

    private DataInputStream dataInputStream;
    private DataOutputStream dataOutputStream;

    private final int PORT = 6700;
    private int parkPlatzCounter = 5;

    private String responseMessage = null;

    public Server() {
        System.out.println("-SERVER-");

        try {
            this.serverSocket = new ServerSocket(this.PORT);
            this.connectionSocket = serverSocket.accept();

            this.inputStream = connectionSocket.getInputStream();
            this.outputStream = connectionSocket.getOutputStream();

            this.dataInputStream = new DataInputStream(inputStream);
            this.dataOutputStream = new DataOutputStream(outputStream);

            do {
                this.responseMessage = this.dataInputStream.readUTF();
                if (this.responseMessage.compareTo("quit") == 0) {
                    sendMessage("Server Stopped!");
                } else if (this.responseMessage.compareTo("in") == 0) {
                    autoEin();
                } else if (this.responseMessage.compareTo("out") == 0) {
                    autoAus();
                } else if (this.responseMessage.compareTo("free") == 0) {
                    free();
                } else {
                    sendMessage("---Falsche Eingabe!---");
                }

            } while ((!(this.responseMessage.compareTo("quit") == 0)));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                this.inputStream.close();
                this.outputStream.close();
                this.serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private void free() {
        sendMessage("> " + this.parkPlatzCounter);
    }

    private void autoEin() {
        if (this.parkPlatzCounter > 0) {
            this.parkPlatzCounter--;
            sendMessage("> ok");
        } else {
            sendMessage("> fail");
        }
    }

    private void autoAus() {
        if (this.parkPlatzCounter < 5) {
            this.parkPlatzCounter++;
            sendMessage("> ok");
        } else {
            sendMessage("> fail");
        }
    }

    private void sendMessage(String msg) {
        try {

            this.dataOutputStream.writeUTF(msg);
            this.dataOutputStream.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Автор: Stolzen 27.4.2012, 11:58
Для начала попробуйте протестировать с помощью моков - например, с помощью библиотеки mockito.

Автор: Killer_13 27.4.2012, 12:04
Цитата

Для начала попробуйте протестировать с помощью моков - например, с помощью библиотеки mockito. 
 - мне наверное проще будет попробовать переделать, так как тест нужно написать на jUnit.
Спасибо.

Автор: lamao 7.5.2012, 16:51
Цитата(Killer_13 @ 27.4.2012,  12:04)
Цитата

Для начала попробуйте протестировать с помощью моков - например, с помощью библиотеки mockito. 
 - мне наверное проще будет попробовать переделать, так как тест нужно написать на jUnit.
Спасибо.

Не знаю, актуально ли еще, но mockito и junit как бы дополняют один другуго. Мокито как раз используется для варинтов, когда нужно абстрагироваться от всех ненужных/неважных для данного теста вещей. То есть в общем случае говорим, что вот если мы вызовем этот метод с такими параметрами, то получим вот это. И не нужно рельных соединений поднимать.

http://en.wikipedia.org/wiki/Mockito

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)