3

何千ものURLを呼び出すプログラムを作成しました。私がやりたいのは、URLがタイムアウトした場合に、タイムアウトエラーをURLまでさかのぼって追跡できることを確認することです。私が用意しているのは:

          string url = "http://www.google.com";
          HttpWebRequest request = (HttpWebRequest)
                                 WebRequest.Create(url);
        request.Timeout = 5000;
        request.ReadWriteTimeout = 5000;
        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101        Firefox/14.0.1";
        //From Fiddler
        DateTime giveUp = DateTime.UtcNow.AddSeconds(5);
        if (DateTime.UtcNow > giveUp)
            throw new TimeoutException("The following url could not be reached: " + url);

タイムアウト例外が正しく機能することをテストするユニットを作成したいと思います。詳細が必要な場合はお知らせください。ただし、これで十分です。

4

3 に答える 3

8

問題は、実際にテストしているものになります。テストで小さなHTTPサーバーを非常に簡単に起動し、タイムアウトすることを知ってリクエストを送信できます。これにより、タイムアウトコードがテストされます。しかし、あなたは本当にHttpWebRequest正しくタイムアウトするかどうかをテストしています。TimeoutException正しくタイムアウトすることは気にせず、タイムアウトすることと、コードが例外を処理することを確認したいことだけを気にします。

この場合に通常行われるのは、基本的にをスローするだけのテストダブル(モック)が使用されることTimeoutExceptionです。

于 2012-09-10T13:19:57.373 に答える
0

単体テストから操作できるように、タイムアウト期間にセッターメソッドを記述します。これを短く設定して例外がスローされるようにしてから、ExpectedException属性を使用するか、単体テストのcatchステートメントでテストして、そのようなものであることを確認します。例外がスローされました。

于 2012-09-10T13:18:16.717 に答える
0

よく知られている結果が得られるはずです。したがって、2つの可能性があります。1。タイマー機能を信頼し、平均期間であるタイムアウトを(テスト用に)使用します(たとえば、期間が40〜50ミリ秒の場合は45ミリ秒を使用します)2。独自に設定しますシミュレートされた遅延のあるサーバー。

于 2012-09-10T13:44:47.110 に答える