集成测试小型Java服务器应用程序

集成测试小型Java服务器应用程序,java,multithreading,sockets,testing,integration-testing,Java,Multithreading,Sockets,Testing,Integration Testing,我想为我已经编写的一个小型服务器应用程序编写一些集成测试,但我不确定从何开始。我有以下服务器代码: import java.net.*; import java.io.*; public class KKMultiServer { public static void main(String[] args) throws IOException { if (args.length != 1) { System.err.println("Usage: java

我想为我已经编写的一个小型服务器应用程序编写一些集成测试,但我不确定从何开始。我有以下服务器代码:

import java.net.*;
import java.io.*;

public class KKMultiServer {
    public static void main(String[] args) throws IOException {

    if (args.length != 1) {
        System.err.println("Usage: java KKMultiServer <port number>");
        System.exit(1);
    }

        int portNumber = Integer.parseInt(args[0]);
        boolean listening = true;

        try (ServerSocket serverSocket = new ServerSocket(portNumber)) { 
            while (listening) {
                new KKMultiServerThread(serverSocket.accept()).start();
            }
        } catch (IOException e) {
            System.err.println("Could not listen on port " + portNumber);
            System.exit(-1);
        }
    }
}
(摘自)


我将如何为这样的代码编写集成测试?我不知道从哪里开始。我过去所做的唯一集成测试是使用Selenium和web应用程序,而不是像这样的多线程套接字服务器应用程序。

将套接字设置为侦听端口80,然后可以使用用于集成测试的工具(Selenium等)。您的url将是“”

它更多的是您将测试什么场景,而不是如何测试。例如:如果是简单的请求-应答测试,那么您可以启动服务器和客户端作为setUp(),然后在测试中尝试将不同的请求从客户端会话传递到服务器进程,并检查其应答。如果服务器在消息流中应答,则收集该流并验证消息顺序、消息内容(或响应)或服务器发送的对象类型。除此之外,您还可以进行会话生命周期测试,例如:一般客户端场景在单个会话中包括哪些内容。您还可以测试当有多个客户端请求同一服务器时,服务器进程如何响应。在这种情况下,可以使用JUnit或TestNG等常规测试框架。如果这涉及的内容远不止这些,那么您也可以看看Citrus框架

import java.net.*;
import java.io.*;

public class KKMultiServerThread extends Thread {
    private Socket socket = null;

    public KKMultiServerThread(Socket socket) {
        super("KKMultiServerThread");
        this.socket = socket;
    }

    public void run() {

        try (
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
                new InputStreamReader(
                    socket.getInputStream()));
        ) {
            String inputLine, outputLine;
            KnockKnockProtocol kkp = new KnockKnockProtocol();
            outputLine = kkp.processInput(null);
            out.println(outputLine);

            while ((inputLine = in.readLine()) != null) {
                outputLine = kkp.processInput(inputLine);
                out.println(outputLine);
                if (outputLine.equals("Bye"))
                    break;
            }
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}