我有一个测试项目,它是我尝试进行单元测试的解决方案的一部分。我要测试的方法之一是使用TemplateControl.LoadControl(string virtualPath)
方法加载自定义控件,例如
LoadControl(“~/CustomControl/Action/FitlerBox.ascx”)
我的问题是当我从Test项目调用此方法时,它总是返回NullReferenceException
。这是因为我认为它永远找不到路径。
有关如何获取此路径的任何建议?
答案 0 :(得分:1)
UPDATE - 我可以使用LoadControl()将其转换为ASP.NET单元测试来进行测试。这将在测试运行时启动Web服务器,这使得它们比普通的单元测试花费更长的时间。我在测试中添加了以下属性:
[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("%PathToWebRoot%\\WebSite", "/WebSite")]
[UrlToTest("http://localhost/WebSite/Default.aspx")]
我们在尝试使用〜(应用程序根目录)从单元测试中加载文件时遇到了类似的问题。在过去,我们通过将文件添加到TESTRUN.CONFIG文件(因此将它们复制到测试目录中)以及将代码更改为:
来解决此问题。if (httpContext.Current == null) // Running under unit test
filename = "abc.txt";
else
filename = "~/abc.txt";
但是,当我使用LoadControl调用(因此它现在是LoadControl(“x.ascx”)时,异常从NullReference更改为“此处不允许相对虚拟路径'x.ascx'”
答案 1 :(得分:0)
如果它位于您提到的路径中的网站下,它应该可以工作。如果没有,则尝试使用Server.MapPath来确定完整路径并使用它。