【问题标题】:Running IIS server with Coypu and SpecFlow使用 Coypu 和 SpecFlow 运行 IIS 服务器
【发布时间】:2012-05-02 12:34:27
【问题描述】:

我已经花了很多时间在谷歌上搜索一些解决方案,但我无能为力!

我有一个 MVC 应用程序,我正在尝试使用 Coypu 和 SpecFlow 对我的视图进行“集成测试”。但我不知道我应该如何管理 IIS 服务器。有没有办法实际运行服务器(第一次开始测试)并让服务器使用特殊的“测试”数据库(例如内存中的 RavenDB)在每个场景之后清空(并在后台填充)。

有没有更好或更简单的方法来做到这一点?

【问题讨论】:

  • 你最后做了什么?我也有这个问题。

标签: iis testing integration-testing specflow


【解决方案1】:

我对此也很陌生,所以对答案持怀疑态度,但因为没有其他人回答......

有没有办法实际运行服务器(第一次开始测试)...

您可以使用 IIS Express,它可以通过命令行调用。您可以在任何测试运行之前启动您的网站(我相信您可以使用 SpecFlow 中的 [BeforeTestRun] 属性)通过System.Diagnostics.Process 调用。

实际的命令行类似于例如

iisexpress.exe /path:c:\iisexpress\<your-site-published-to-filepath> /port:<anyport> /clr:v2.0

...并让服务器使用特殊的“测试”数据库(例如内存中的 RavenDB),在每个场景之后清空(并在后台填充)。

为了使用特殊的测试数据库,我想这取决于您的数据访问是如何工作的。如果您可以相当轻松地交换内存数据库,那么我想您可以这样做。虽然我的理解是集成测试应该尽可能接近生产环境,所以如果可能的话,请使用与生产环境相同的 DBMS。

我所做的只是在每次测试运行之前从 prod 数据库的已知备份将数据恢复到我的测试数据库。在我的测试运行之前,我可以再次通过命令行/Process 调用它。对于我的数据库,它是一个相当小的数据集,我可以只恢复与我的测试相关的表,所以这个开销对于集成测试来说并不太高。 (但是,这对于单元测试是不可接受的,因为您可能会在其中拥有模拟存储库或内存中的数据。)

【讨论】:

  • "iisexpress.exe 不是内部或外部命令、可运行程序或批处理文件。"
【解决方案2】:

既然您已经在使用 SpecFlow,请查看 SpecRun (http://www.specrun.com/)。

它是一个测试运行程序,专为 SpecFlow 测试而设计,并添加了各种功能,从小的便利性(例如在测试资源管理器中更好地格式化测试名称)到支持针对多个目标和配置文件转换运行相同的 SpecFlow 测试。

使用 SpecRun,您可以定义一个“配置文件”,用于运行您的测试,与 VS .runsettings 文件没有什么不同。在那里你可以指定:

<DeploymentTransformation>
  <Steps>
      <IISExpress webAppFolder="..\..\MyProject.Web" port="5555"/>
  </Steps>
</DeploymentTransformation>

SpecRun 将在运行测试之前启动一个运行该网站的 IISExpress 实例。在同一个地方,您还可以设置自定义部署转换(使用标准 App.Config 转换)以覆盖应用程序 Web.config 中的连接字符串,使其指向内存数据库。

我对 SpecRun 的唯一问题是文档不是很好,有很多视频演示,但我更希望有一些书面教程。我想这就是 StackOverflow 的用途。

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2022-01-14
    相关资源
    最近更新 更多