我正在寫一個Downloader(與TDD的樂趣),因爲我有一個方法,其責任是連接到文件。編寫單元測試的方法有網絡連接依賴關係
class FileConnectorHttp : IFileConnector
{
public void ConnectToFile()
{
//creating a concrete web request here.
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(UriForTheFileToConnect);
//sending HEAD request.
webRequest.Method = "HEAD";
//other logic for connection will go here.
try
{
HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse;
}
catch (ProtocolViolationException e)
{
throw;
}
catch (InvalidOperationException e)
{
throw;
}
}
}
我寫了一個測試用於測試連接超時場景。
[Test]
public void ConnectToSourceFile_ValidUri_Connection_TimeOut_Throws_WebException()
{
Uri uriForTheFileToDownload = new Uri("https://suppose/this/is/valid/url.txt");
FileConnectorHttp fileConnectorOverHttp = new FileConnectorHttp(uriForTheFileToDownload);
Assert.Throws(Is.TypeOf<WebException>(),
() => fileConnectorOverHttp.ConnectToFile());
}
所以得到這個例外,我應該關閉我的Wifi連接?什麼應該是測試這種異常的有意義的方法?
看看這個[post](http://stackoverflow.com/questions/11025097/untitesting-moq-method-calling-webrequest)。我認爲它解釋了你想要達到的目標。 – Hintham
一個問題;你爲什麼抓住並立即重新拋出這些例外?您的代碼編寫方式,此處引發的任何異常都將顯示給調用者。所以我不確定是否需要對此進行單元測試 - 如果webRequest.GetResponse中出現WebException異常將會出錯的情況,可以認爲它是公理性的;因爲那不是你控制的代碼,你不需要測試它。 –
您正在使用什麼版本的Visual Studio? – zaitsman