使用Coypu和SpecFlow运行IIS服务器

时间:2012-04-20 22:39:57

标签: iis testing integration-testing specflow

我已经花了很多时间在谷歌搜索解决方案,但我很无奈!

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

有更好或更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

我对此也很陌生,所以用一点点盐来解答答案,但没有其他人回答......

  

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

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

实际的命令行就像是这样。

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

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

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

我正在做的只是每次在测试运行之前从prod DB的已知备份执行数据恢复到我的测试数据库。在测试运行之前,我可以通过命令行/ Process再次调用它。对于我的数据库,它是一个相当小的数据集,我只能恢复与我的测试相关的表,因此这种开销对于集成测试来说并不过分。 (然而,对于单元测试来说这是不可接受的,也就是你可能有模拟存储库或内存数据的地方。)

答案 1 :(得分:0)

由于您已经在使用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的用途。