我仍在尝试为 ASP.NET 站点(不是 MVC)添加一些单元测试。确切地说,我需要测试的方法之一是使用该HttpRequest Request
对象。Request.Path
我正在尝试使用 Visual Studio 2008 的内置测试框架编写测试。每当测试执行有问题的方法时,我都会收到一个System.Web.HttpExecption: Request is not Available in this context
. 我明白为什么它不可用(没有正在运行的 Web 服务器,也没有提供路径),但我该如何继续测试该方法?
既然大家都喜欢看代码,下面是有问题的代码:
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")]
Attributes ,但是没运气。(如您所见,我不确定应该为一些参数使用什么。)。
最后,我尝试了 Phil Haack 的 TestWebServer http://haacked.com/archive/2006/12/12/Using_WebServer.WebDev_For_Unit_Tests.aspx
并阅读了 Scott Hanselman 的帖子http://www.hanselman.com/blog/NUnitUnitTestingOfASPNETPagesBaseClassesControlsAndOtherWidgetryUsingCassiniASPNETWebMatrixVisualStudioWebDeveloper.aspx
For Phil 的服务器,我不确定我会在ExtractResource
方法中使用什么参数。