技术开发 频道

VS Team Edition在其它单元中的测试

  当运行测试时,与其它测试的运行并没有差别。在常规案例中,需要保证Web服务的宿主服务器在测试运行之前已经启动。但是本示例中,Visual Studio承载测试框架,并用于开发和承载Web服务(同本例),Visual Studio Web服务器(Cassini)按需求启动。另外,在常规案例中,如果重新部署Web服务,那么必须在新位置指定Web服务客户端配置信息文件。但是,这种情况下Visual Studio承载测试框架,并用于开发和承载Web服务,它自动实现这些操作。

  当Web服务由Cassini承载,并且尝试在Visual Studio意外运行时(例如Mstest.exe、命令行测试工具、或者Team Foundation Server的Team Build),该测试就会出现问题。无论是Mstest.exe,还是Team Foundation Server的Team Build都不能启动Cassini,即使能够启动,它们也没有向代理传送Cassini所选动态端口的方法。在这个示例中,需要获取测试框架才能实现所有重要功能。为了通知测试框架启动Cassini监听专用虚拟目录(映射专用物理目录)的请求,需要应用AspNetDevelopmentServer属性。另外,需要使用WebServiceHelper类的TryUrlRedirection方法通知端口代理Cassini选择的监听端口,测试框架信息存储在TestContext中的。注意PathToWebRoot变量用于避免Cassini使用的硬编码物理地址。这个变量在Visual Studio“工具”菜单的“选项”设置,然后为设置应用程序根目录,如图13所示。



图13  设置PathToWebRoot变量

 

[TestClass()]
public class WebUnitTests
{
  [TestMethod()]
  [AspNetDevelopmentServer(
"mysettings",
    
@"%PathToWebRoot%\MyWebSite", "/MyWebSite")]
  
public void AddTest()
  {
    CalcWebService target
= new CalcWebService();

    
int x = 1;
    
int y = 2;
    
int expected = 3;
    
int actual;

    WebServiceHelper.TryUrlRedirection(
      target, TestContext,
"mysettings");

    actual
= target.Add(x, y);
    Assert.AreEqual(expected, actual);
  }
}
0
相关文章