'2K3构建服务器上的单元测试中不允许'应用程序相对虚拟路径'〜/',而不是XP / Vista dev机器

时间:2009-04-13 19:58:45

标签: asp.net asp.net-mvc

我正在嘲笑HttpRequestBase,所以我可以在测试代码中创建一个HtmlHelper,并围绕HtmlHelper扩展方法编写测试。我这是设置代码的一部分:

httpRequestBase.Stub(h => h.ApplicationPath).Return("~/");
httpRequestBase.Stub(h => h.AppRelativeCurrentExecutionFilePath).Return(appPath);
httpRequestBase.Stub(h => h.PathInfo).Return("");

在两台开发机器上(一台运行XP,一台Vista 64位)工作正常。但是,在Windows Server 2003构建计算机上,当我在HtmlHelper上调用RouteLink()时测试失败,如下所示:

System.ArgumentException:此处不允许应用程序相对虚拟路径'〜/'。 在System.Web.VirtualPath.Create(String virtualPath,VirtualPathOptions options)

在这两种情况下,我都使用NUnit 2.4.8和NUnit GUI作为测试运行器。除了OS之外,其他所有内容都是相同的:相同版本的RhinoMocks(3.5),相同版本的ASP.NET MVC(RTM)。我尝试从开发机器上复制二进制文件,而不是使用构建机器上的二进制文件,这没什么区别。

当我将设置代码中的第一行更改为:

httpRequestBase.Stub(h => h.ApplicationPath).Return("/");

测试在所有机器上通过。

知道为什么吗?

2 个答案:

答案 0 :(得分:10)

“〜/”不是ApplicationPath的有效值。 “〜/”语法的重点是允许您指定相对于ApplicationPath的URL。

对于有根网站,值应为“/”。对于虚拟目录中的站点,它应该是类似“/ mysite”的值。

答案 1 :(得分:4)

HttpRuntime.AppDomainAppVirtualPath属性适用于这两种情况。它为网站返回“〜/”,但在单元测试中返回null,因此不会破坏它们。

来源:http://ediblecode.com/blog/dev/testing-the-application-relative-virtual-path-is-not-allowed-here