* 不依赖于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,返回其服务地址给测试使用):


















- 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);
}
}