4

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

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

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

4

2 回答 2

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 的用途。

于 2014-05-06T13:13:23.877 回答
0

我对此也很陌生,所以用少许盐来回答,但因为没有其他人回答......

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

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

实际的命令行将类似于例如

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

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

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

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

于 2012-06-07T10:26:26.947 回答