asp.net - 如何为 Web 测试做模拟?

标签 asp.net testing unity-container watin cassini-dev

我想为我的 asp.net 网络应用程序编写一些网络测试(通过 WatiN/Selenium + CassiniDev 网络服务器)。

我遇到的问题是在这种情况下我不知道该怎么办: 有一个页面,用户可以在其中单击按钮来调用某些第三方服务。在我的网络测试中,我想创建此服务的模拟,它将始终返回静态值(这些测试用例中的一些值和其他测试用例中的其他值)。

我该怎么做?

目前我使用 IoC/DI 容器 Microsoft Unity。我的页面以 http://msdn.microsoft.com/en-us/library/ff664622%28v=pandp.50%29.aspx 中描述的方式获取他的依赖项.

我想到的唯一解决方案是:将每个测试用例的所有依赖项都放在 web.config 中,并在测试的 SetUp 上复制必要的 web.config。这个解决方案非常痛苦!

有什么想法吗?

最佳答案

我也在我的集成测试中使用 WatiN 和 Cassini-dev,并且不得不处理类似的问题。在我的安装夹具中,我将我的 Asp.Net Web 应用程序部署到我的测试文件夹中的一个临时文件夹,这允许我在启动 cassini-dev 之前尝试配置。我将 Windsor 用于我的 CI,它允许我在配置级别更改注入(inject)的组件。您也可以使用 Unity 来实现这一目标.

如果您所指的服务是 Web 服务,您只需使用您编码的接口(interface)模拟 Web 服务即可。

以下是我在运行集成测试时采取的步骤:

  1. 创建一个临时网站目录
  2. 将 Asp.Net Web 应用程序发布到临时目录(我使用 MSBuild 来执行此操作)
  3. 部署临时数据库(使用 MSbuild 和数据库项目,但可以通过多种方式完成)
  4. 部署临时成员(member)数据库(请参阅我的 blog post,了解如何在代码中执行此操作)
  5. 更新已部署的 Asp.Net Web 应用程序的 web.config 以指向临时数据库并更改与测试相关的任何其他设置。
  6. 使用 Cassini-Dev 启动网站。我还通过 http 请求访问了该网站,以便我可以在运行任何测试之前验证该网站是否正常运行。

运行测试。

运行测试后,您应该进行清理。

  1. 停止 cassini-dev
  2. 删除临时托管文件夹
  3. 删除临时数据库。我使用 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 成员(member)数据库: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

关于asp.net - 如何为 Web 测试做模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700060/

相关文章:

c# - 使用 ASP.NET Core 反序列化 appsettings.json

c# - 如何在 .net 中屏蔽信用卡号的前 6 位和后 4 位

c# - 从 Javascript 设置 Viewstate 的值

c# - MVC4 多 Controller

c# - 启用 Unity 以解决来自 OwinContext 的依赖项

java - 我需要在 jmeter 中打开 .html 文件

rest - 在另一个 build.gradle 项目中执行测试

testing - Grails 测试和@Transactional

wpf - 在 WPF CAL MVVM 中初始化模型和 View 的正确方法是什么

c# - ASP.Net MVC 4 Web API Controller 不适用于 Unity.WebApi