我仍然試圖添加一些ASP.NET站點(而不是MVC)的單元測試。我需要測試的一種方法是使用HttpRequest Request
對象,確切地說是Request.Path
。我正在嘗試使用Visual Studio 2008內置的測試框架編寫測試。每當測試執行所述方法時,我收到System.Web.HttpExecption: Request is not Available in this context
。我明白爲什麼它不可用(沒有正在運行的Web服務器並且沒有提供路徑),但我該如何繼續測試該方法?單元測試ASP.NET(而不是MVC) - 我如何過去「請求在此上下文中不可用」?
既然大家都喜歡看代碼,這裏是有問題的代碼:
protected string PageName
{
get
{
return Path.GetFileName(Request.Path).Substring(0, Path.GetFileName(Request.Path).Length - 5);
}
}
protected Change SetupApproval(string changeDescription)
{
Change change = Change.GetInstance();
change.Description = changeDescription;
change.DateOfChange = DateTime.Now;
change.Page = PageName;
return change;
}
這裏的測試:通過微軟的文檔
[TestMethod]
public void SetupApproval_SubmitChange_ValidateDescription()
{
var page = new DerivedFromInternalAppsBasePage_ForTestingOnly();
var messageToTest = "This is a test description";
var change = page.SetupApproval(messageToTest);
Assert.IsTrue(messageToTest == change.Description);
}
另外,我已經讀到這裏:http://msdn.microsoft.com/en-us/library/ms182526(v=vs.90).aspx 和嘗試使用[HostType("ASP.NET")]
,[UrlToTest(http://localhost:port/pathToAspxPage.aspx")]
和[AspNetDevelopmentServer("C:\PathToDllAssembly", "NotSureParameter")]
他們建議的屬性,但沒有運氣。 (正如你所看到的,我不確定我應該使用幾個參數。)。
最後,我想菲爾哈克的TestWebServer http://haacked.com/archive/2006/12/12/Using_WebServer.WebDev_For_Unit_Tests.aspx 並通過斯科特Hanselman的後http://www.hanselman.com/blog/NUnitUnitTestingOfASPNETPagesBaseClassesControlsAndOtherWidgetryUsingCassiniASPNETWebMatrixVisualStudioWebDeveloper.aspx 對於菲爾的服務器讀取,我不知道我會在ExtractResource
方法使用的參數。
「傳統的單元測試的智慧」(J/K)將建議取消從依賴該代碼並允許它從模擬對象傳入或管理。 –