0

指定されたポートが使用可能かどうかをテストする関数があります。

public static boolean isPortAvailable(int port) throws IOException {
        boolean isAvailable = false;
        ServerSocket serverSocket = null;
        if (isValidPort(port)) {

            try {
                serverSocket = new ServerSocket(port);
                isAvailable = true;
            } catch (IOException ignore) {
                isAvailable = false;
            } finally {
                if (serverSocket != null) {
                    serverSocket.close();

                }
                serverSocket = null;
            }

        }
        return isAvailable;
    }

junitを使用してこのメ​​ソッドのfalse条件をテストする必要があります。

@Test
    public void testPortUnAvailable() throws IOException{
        int port = 49613 ;
        Assert.assertFalse(PortUtil.isPortAvailable(port));
    }

ポート番号49613またはその他のポートをテストに使用できないようにするにはどうすればよいですか?同じことを行うためのより良い方法に関する他の提案は大歓迎です。

4

1 に答える 1

1

任意の空きポートにバインドされるServerSocketを作成します。49613のようなハードコードされたポートを使用すると、ポートが現在別のアプリケーションによって使用されている場合、テストは失敗します。このアプリケーションでは、通常、あまり制御できません。動的に割り当てられたポートを使用してメソッドをテストしてから、ソケットを閉じます。

ServerSocket ss = new ServerSocket(0);
try {
    Assert.assertFalse(PortUtil.isPortAvailable(ss.getLocalPort()));
}
finally {
    ss.close();
}

isPortAvailableメソッドがIOExceptionではなくjava.net.BindExceptionをチェックする場合も、おそらくより良いでしょう。他のIOExceptionは、他の何かが間違っていることを意味し、必ずしもポートがすでに使用されているとは限らないためです。

于 2013-01-24T11:28:03.323 に答える