我已经花了很多时间在谷歌上寻找一些解决方案,但我无能为力!
我得到了一个MVC应用程序,我正在尝试使用Coypu和SpecFlow对我的视图进行“集成测试”。但我不知道该如何管理IIS服务器。有没有办法实际运行服务器(第一次开始测试),并使服务器使用一个特殊的“测试”DB (例如,内存中的RavenDB),在每个场景之后清空(并在后台填充)。
有没有更好或更简单的方法来做这件事?
发布于 2012-06-07 18:26:27
我对此也相当陌生,所以对答案持保留态度,但因为没有人回答……
有没有一种实际运行服务器的方法(第一次开始测试)……
您可以使用IIS Express,它可以通过命令行调用。您可以在通过System.Diagnostics.Process调用运行任何测试(我相信您可以使用SpecFlow中的[BeforeTestRun]属性)之前启动您的网站。
实际的命令行应该类似于例如
iisexpress.exe /path:c:\iisexpress\<your-site-published-to-filepath> /port:<anyport> /clr:v2.0...并使服务器使用一个特殊的“测试”DB (例如,内存中的RavenDB),在每个场景之后清空(并在后台填充)。
为了使用特殊的测试DB,我猜这取决于您的数据访问是如何工作的。如果您可以相当容易地交换内存中的DB,那么我猜您可以这样做。尽管我的理解是集成测试应该尽可能接近生产环境,因此如果可能的话,请使用您在生产中使用的相同DBMS。
我所做的就是每次在测试运行之前,从prod DB的已知备份恢复到我的测试DB。在测试运行之前,我可以通过命令行/Process再次调用它。对于我的数据库,它是一个相当小的数据集,并且我可以只恢复与我的测试相关的表,所以对于集成测试来说,这种开销不会太大。(但是,这对于单元测试是不可接受的,因为在单元测试中可能会有模拟存储库或内存中的数据。)
发布于 2014-05-06 21:13:24
既然您已经在使用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中的连接字符串,以便它指向内存中的DB。
我使用SpecRun的唯一问题是文档不是很好,有很多视频演示,但我更愿意有几个书面教程。我想这就是StackOverflow在这里的目的。
https://stackoverflow.com/questions/10254443
复制相似问题