我在集成测试中也使用了 WatiN 和 Cassini-dev,并且不得不处理类似的问题。在我的设置装置中,我将我的 Asp.Net Web 应用程序部署到我的测试文件夹中的一个临时文件夹中,这允许我在启动 cassini-dev 之前使用配置。我将 Windsor 用于我的 CI,它允许我在配置级别更改注入的组件。您也可以使用Unity来实现这一点。
如果您所指的服务是 Web 服务,您只需使用您编写的接口模拟一个 Web 服务。
以下是我在运行集成测试时采取的步骤:
- 创建一个临时 Web 目录
- 将 Asp.Net Web 应用程序发布到临时目录(我使用 MSBuild 来执行此操作)
- 部署临时数据库(使用 MSbuild 和数据库项目,但可以通过多种方式完成)
- 部署临时会员数据库(请参阅我的博客文章,了解如何在代码中执行此操作)
- 更新已部署的 Asp.Net Web 应用程序的 web.config 以指向临时数据库并更改与测试相关的任何其他设置。
- 使用 Cassini-Dev 启动网站。我还使用 http 请求访问该站点,以便在运行任何测试之前验证该站点是否已启动。
运行测试。
运行测试后,您应该清理。
- 停止卡西尼开发
- 删除临时托管文件夹
- 删除临时数据库。我使用 Sql server SMO 对象,这些对象允许我查询 Sql Server,我使用它来删除在任何先前失败的测试运行后留下的任何旧数据库。
如何在代码中使用MSbuild部署网站
var properties = new Dictionary<string, string>
{
{"Configuration", isDebug ? "Debug" : "Release"},
{"WebProjectOutputDir", tempHostingDirectory.FullName},
{"DeployToDatabase", "true"},
{"OutDir", Path.Combine(tempHostingDirectory.FullName, "bin\\")}
};
using (var engine = new ProjectCollection(properties))
{
engine
.LoadProject(<web project path>, "4.0")
.Build(new[] {"Build", "ResolveReferences", "_CopyWebApplication"});
}
Unity配置部分使用:http ://www.pnpguidance.net/Post/UnityContainerUnityConfigurationSectionAppConfigWebConfig.aspx
在代码中生成 asp.net 会员数据库:http: //bronumski.blogspot.com/2011/06/generating-creating-aspnet-application.html
MSDN 上的 Msbuild ProjectCollection:http: //msdn.microsoft.com/en-us/library/microsoft.build.evaluation.projectcollection.aspx