我的项目需要在CruiseControl中自动测试WEB服务,测试需满足下列条件:
* 不依赖于IIS
* 不对WebService做部署,直接在其CC编译的生成目录中运行WEB服务
如果满足以上需求,当然也可以使用相同方式在VS和CC里测试网页。
在网上找到了SCOTT的文章
NUnit Unit Testing of ASP.NET Pages, Base Classes, Controls and other widgetry using Cassini (ASP.NET Web Matrix/Visual Studio Web Developer),使用Cassini来做果然方便。
自己写了个帮助类(见页尾),然后这样使用(在
TestFixtureSetUp中运行Cassini,返回其服务地址给测试使用):
[TestFixtureSetUp]
public void Init()

{
_cassni = new CassiniHelper();
_cassni.Start();
//你可如此获得Cassini运行起来的WEB服务地址
//config.CurrentServiceEntryUrl = _cassni.WebServerUrl;
}

[TestFixtureTearDown]
public void FixtureTearDown()

{
_cassni.Close();
}
- CassiniHelper
internal class CassiniHelper

{
private int _webServerPort = 26610;
private Server _webServer;
private readonly string _webServerVDir = "/ws";
private string _workingPath;
private string _webServerUrl;
private string _abstractPathFromTestToWebService = @"..\..\..\WebService";

public CassiniHelper()

{
SetWebServerUrl();
}

public int WebServerPort

{

get
{ return _webServerPort; }
set

{
_webServerPort = value;
SetWebServerUrl();
}
}

public string WebServerUrl

{

get
{ return _webServerUrl; }

set
{ _webServerUrl = value; }
}


/**//// <summary>
/// 从测试案例程序集所在目录到WEBServer所在目录的相对路径
/// </summary>
public string AbstractPathFromTestToWebService

{

get
{ return _abstractPathFromTestToWebService; }

set
{ _abstractPathFromTestToWebService = value; }
}


/**//// <summary>
/// WEB服务的虚拟路径
/// </summary>
public string WebServerVDir

{

get
{ return _webServerVDir; }
}

public void Start()

{
if(!Directory.Exists(_workingPath))
throw new DirectoryNotFoundException(_workingPath);

_webServer = new Server(_webServerPort, WebServerVDir, _workingPath);
_webServer.Start();
}

public void Close()

{
try

{
if (_webServer != null)

{
_webServer.Stop();
_webServer = null;
}
}

catch
{ }
}

private void SetWebServerUrl()

{
string currentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
DirectoryInfo dinfo = new DirectoryInfo(Path.Combine(currentPath, _abstractPathFromTestToWebService));
_workingPath = dinfo.FullName;

//拷贝Cassini.dll到web服务的bin目录下
string cassini = "Cassini.dll";
File.Copy(Path.Combine(currentPath, cassini), Path.Combine(Path.Combine(_workingPath,"bin"),cassini));

_webServerUrl = String.Format("http://localhost:{0}{1}", _webServerPort, WebServerVDir);
}
}
posted @ 2008-07-18 19:44
251 阅读(132)
评论(1) 编辑 收藏 网摘 所属分类:
XP/CI