“Web请求在未运行测试的情况下成功完成。”的处理方法。
2010-08-05 15:37 Jeff Chow 阅读(916) 评论(0) 编辑 收藏 举报不论是在Web项目中添加Web服务还是直接新建一个Web服务项目,在为WebMethod创建单元测试,运行测试的时候有可能抛出这样的错误信息:
Web 请求“http://localhost:<port>/”在未运行测试的情况下成功完成。这种情况会在为测试配置 Web 应用程序失败(处理请求时发生 ASP.NET 服务器错误)时或未执行任何 ASP.NET 页(URL 可能指向一个 HTML 页、一个 Web 服务或一个目录列表)时发生。在 ASP.NET 中运行测试要求 URL 解析为 ASP.NET 页,并且该页在 Load 事件发生之前一直正确执行。请求的响应连同测试结果一起存储在文件“WebRequestResponse_<web method name>.html”中,通常可使用 Web 浏览器打开此文件来查看其内容。
看看错误信息的说明。当中已经说出,发生这种情况有两个可能:1.配置Web应用程序失败,2.未执行任何ASP.NET页。因此,排除错误也从这两方面下手。
首先要确定Web应用程序是可以正确执行的。如何判断呢?只要该程序能被正常编译,或是能在浏览器中正常浏览该WebService即可。能被正常浏览的WebService的内容大致如下:
如果Web应用程序是可以正确执行的,那么出现上述错误的原因则是第二种情况:未执行任何的ASP.NET页。在为一个WebMethod通过Visual Studio创建单元测试时,自动生成的代码大致如下:
/// <summary> ///HelloWorld 的测试 ///</summary> [TestMethod()] [HostType("ASP.NET")] [AspNetDevelopmentServerHost("E:\\Visual Studio 2005\\Test\\TestWebService", "/")] [UrlToTest("http://localhost:6036/")] public void HelloWorldTest() { TestService target = new TestService(); string actual; actual = target.HelloWorld(); Assert.Inconclusive(actual); }
按属性名来理解,HostType设定的是主机类型,AspNetDevelopmentServerHost指定的是项目的路径,而UrlToTest指定的是发送请求到WebService的Url,导致上述错误出现的问题也在此。因为HostType属性指定了主机的类型是ASP.NET,则UrlToTest属性必须可以被解析为ASP.NET页。在运行测试的时候,正是该页面向WebService发送请求。
在Visual Studio自动创建的代码中,UrlToTest的值通常是Web项目的Url,该Url默认是会指向项目中的Default.aspx页面,具体情况视ASP.NET服务器的配置而定。所以,如果你所建的项目中没有Default.aspx的话,直接运行测试的时候则会出现上述错误。所以我们必须把UrlToTest的值改成一个可被解析为ASP.NET的页。
以下属于猜测:如果HostType的值不指定为ASP.NET的话,UrlToTest也应该可以使非ASP.NET页。本人对HostType属性了解不多,这里只作简单说明,留待有兴趣的朋友自己验证。