2012-09-10 22 views
2

我創建了一個程序來調用數千個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); 

我想做一個單位來測試超時異常工作正常。讓我知道你是否需要更多的細節,但這應該就足夠了。

+3

也許你可以使用Thread.Sleep(5000); – TGlatzer

+0

你在使用什麼框架?有許多方法可以限制MSTest中測試運行的超時期限。 –

+0

我在.NET框架內使用NUnit。我確實發現可以使用單元測試的斷言TimeoutException。 – Rayshawn

回答

7

問題就變成了你真正測試的東西。你可以很容易地在你的測試中啓動一個小HTTP服務器,並向它發送一個請求,知道它會超時 - 這將測試你的超時代碼。但是,你真的在​​測試HttpWebRequest是否正確超時。你不關心它是否正確超時,只是它確實超時,並且你想確保你的代碼處理了一個TimeoutException異常。

在這種情況下通常會做的是使用測試雙(模擬),基本上只是拋出一個TimeoutException

0

你應該有很好的結果。所以我看到兩種可能性: 1.您信任計時器功能並使用(用於測試)一個平均持續時間的超時(例如,如果持續時間爲40-50毫秒,則使用45毫秒) 2.設置你自己的服務器模擬延遲。

相關問題