2012-05-31 63 views
0

一点背景:用户界面测试与RavenDB

我有一个web应用程序读取存储在RavenDB中的非规范化文档集。这些文档是由事件处理程序创建和修改的。在生产中,应用程序使用标准文档存储,通过c#API连接到远程数据库。

当我单元测试应用程序时,我将处理程序配置为使用内存嵌入式数据库,创建一些事件并查询预期的文档。这工作绝对好。

编写UI测试:

我想使我们的测试人员编写使用SpecFlow和硒自动化UI测试。在实现这个为其他应用程序(使用SQL),特征文件的执行将通过编写一个测试环境:

  • 在当地的SQLExpress实例创建一个新的数据库(按照惯例每个人都有同样的情况名的机)
  • 重新配置的处理程序来使用新的数据库,并引发事件以创建所需的状态
  • 拷贝测试中的Web应用程序到一个新的临时位置,并重新在新的数据库
  • 启动Web应用程序读取在IIS Express中(再次大家遵循这个约定)
  • 运行特征(一个或多个),落料和如果需要的话
  • 停止IIS,删除该应用程序下测试,并且删除数据库

现在我想遵循相同的方法重建的每个之间的状态使用乌鸦,我正在考虑两种方法。

第一种是遵循与上述完全相同的模型。我在这里的问题是如何/在哪里存储数据库,以及之后如何整理它们。服务器可执行文件可以在安装和拆卸过程中以编程方式启动和停止,并且之后可以通过删除文件删除数据库。我没有尝试过,但理论上它应该起作用。

第二种是遵循类似的方法,但用标准文档存储替换嵌入式文档(不在内存中运行)。为此,我需要修改Web应用程序的IoC(如果使用xml中的配置),以将IDocumentStore解析为EmbeddedDocumentStore。然后,我像之前一样使用处理程序构建状态,然后在启动IIS之前处理处理程序的文档存储区(似乎无法在使用相同嵌入式数据库的同一时间运行两个应用程序,除非我缺少它东西)。

第二种方法似乎是最好的选择,但我遇到了一些奇怪的行为,即处理程序创建的文档与Web应用程序查询返回的结果不一致。具体来说,某些子集合由处理程序填充,但从Web应用程序执行的查询返回时为空。说实话,我并不太惊讶,因为我怀疑这是嵌入式数据库打算被使用的场景。另外,当我从一个应用程序跳到另一个应用程序时,通过管理工作室查看嵌入式数据库非常困难。

因此,无论如何,在那段冗长的描述之后,我很好奇别人对这些方法的看法,以及是否有更好的选择我错过了。另外我确定有很多隐藏的RavenDB宝石,我不知道,所以任何指向这个方向的指针都会有帮助。

回答

2

Nigel, 以编程方式启动/停止raven.server。但通过/ram国旗,这将让你运行内存中的整个事情,并可以照顾所有的清理工作

+0

真棒的东西。这不是一件容易的事情! – Nigel