0

タイムアウトをテストするための 2 つの Junit テストケースを作成中です。

@Test
    public void connectionTimeoutTest()
    {
        String myurl = "http://serverip:serverport/context";
        URL url = new URL(myurl);
        URLConnection con = url.openConnection();

        //how to check connectionTimeout but not socket time out

        //what I think
        //is it good enough to check with a server ip that does not exist ?
    }

    @Test
    public void socketTimeoutTest()
    {
        String myurl = "http://localhost:serverport/context";
        URL url = new URL(myurl);
        URLConnection con = url.openConnection();

        //how to check successful connection and timesout at socket (or port)

        //what I think
        //IP should exist (so it is localhost) but should not be listening on the port
    }

私のアプローチが正しいかどうかわからないので、ここで混乱しています。それぞれの場合の例外は何ですか? また、例外に基づいて区別することは可能ですか?

他に見逃したタイムアウトはありますか?

前もって感謝します

4

3 に答える 3

0

単体テストの要件についてはあまり明確ではありません。サーバーの接続 (およびソケット読み取り) タイムアウト値をテストする場合、上記のアプローチでは、特定の「最大」しきい値を検証することしかできません。ただし、TCP サーバー側のタイムアウト設定を確認することはできません。TCP サーバーの接続 (および読み取り) タイムアウトは、プラットフォーム (OS) や TCP スタックの実装などの要因によって異なります。

繰り返しますが、この URLConnection によって参照されるリソースと通信する場合、タイムアウト設定は、setConnectTimeoutまたはsetReadTimeout()クライアント ソケットのみに設定されます。

于 2013-05-29T19:25:37.640 に答える
-1

最初のテスト ケースでは、存在しない IP アドレスが原因で、java.net.UnknownHostException が発生すると思います。

ソケット接続タイムアウト例外を発生させたい場合 (正確には "java.net.SocketTimeoutException: connect timed out" のようなメッセージを取得します)、URLConnection.setConnectTimeout(10) を使用し、パラメーターをできるだけ小さく設定しますが、正の値に設定します。

2 番目のテスト ケースでも同様に、URLConnection.setReadTimeout(10) を使用して、読み取りタイムアウト例外 ("java.net.SocketTimeoutException: Read timed out") を発生させることができます。

于 2013-08-29T10:02:43.993 に答える