如何测试内部创建和使用ServerSocket的方法

时间:2016-08-15 14:51:03

标签: java sockets testing junit serversocket

我的服务器代码如下所示:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server implements Runnable {   
    private ServerSocket serverSocket;
    public Server(int port) throws IOException {
        serverSocket = new ServerSocket(port);
    }

    @Override
    public void run() {
        try {
            Socket client = serverSocket.accept();
            // do stuff
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我的计划是编写一个连接到服务器套接字的模拟客户端,并验证结果,但为了做到这一点,我需要知道连接到哪个端口。但是,这些信息是私密的。

我想到的所有选项都不是我认为的好习惯:

  1. 如果我使用预定义的端口号进行测试,我无法保证它可用。即使它在测试之前可用,但在我尝试使用它时理论上可能会被抢夺。
  2. 如果我将0作为端口号传递(以便ServerSocket以原子方式提供空闲端口),我仍然无法访问它。
  3. 我可以在接口中添加getServerPort()方法或创建一个接受ServerSocket对象的构造函数,但仅为了测试而更改接口被认为是不好的做法。

0 个答案:

没有答案