今天使用VSTS的测试框架对ASP.NET构建单元测试,用了以前一些应用测试一下,一路下来,相当顺畅,但当我随便创建一个Web Service的时候,生成的测试代码却老是运行不下去,提示如下类似的错误:
Web 请求“http://localhost:15495/”在未运行测试的情况下成功完成。这种情况会在为测试配置 Web 应用程序失败(处理请求时发生 ASP.NET 服务器错误)时或未执行任何 ASP.NET 页(URL 可能指向一个 HTML 页、一个 Web 服务或一个目录列表)时发生。在 ASP.NET 中运行测试要求 URL 解析为 ASP.NET 页,并且该页在 Load 事件发生之前一直正确执行。请求的响应连同测试结果一起存储在文件“WebRequestResponse_HelloWorldTest.html”中,通常可使用 Web 浏览器打开此文件来查看其内容。
找了好多原因,web.config,网站的路径,网页中的错误,什么都找过,都不见有什么不对劲的东西,正当我百思不得其解的时候,往以前做好的网站中添加Web Service的时候,再创建单元测试,竟然就顺利通过,再没有上面那段错误信息,认真的对比了一下测试代码,发觉唯一不同的就是新加的Web Service测试中自动封装了一个访问器Accessor进行访问,查看元数据代码:
using System;
[Shadowing( " ws1 " )]
public class ws1_Accessor : BaseShadow
... {
protected static PrivateType m_privateType;
[Shadowing(".ctor@0")]
public ws1_Accessor();
public ws1_Accessor(PrivateObject __p1);
public static PrivateType ShadowedType ...{ get; }
public static ws1_Accessor AttachShadow(object __p1);
[Shadowing("HelloWorld@0")]
public string HelloWorld();
}
也没有什么特别,我想没有这个封装也是可以,最后只好把目光放在那些测试的属性中去,我暂时用到的属性有这几个:
[AspNetDevelopmentServerHost( " %PathToWebRoot%/ws_test2 " , " /ws_test2 " )]
[UrlToTest( " http://localhost/ws_test2 " )]
[DeploymentItem( " app_code.dll " )]
其中AspNetDevelopmentServerHost只在用文件服务器的时候要用上,在IIS上运作就不需要,其后我还在IIS上调试过,问题依然如故.
再细看那段错误提示,其中说到"未执行任何 ASP.NET 页时发生",我想是不是HostType惹得祸,试着把它注释掉,测试竟然可以顺利运行了,问题暂时解决了,但纳闷的事又来了,屏蔽掉HostType属性,那么默认访问HostType又是什么,在MSDN上没有找到答案,望知道的大大告知小弟一声,不胜感激!